numpy的一些基础操作总结(1)

numpy的一些基础操作总结(1)

  • numpy基础用法
    • 1 使用其他函数创建数组
    • 2 花式索引 利用嵌套列表进行索引
    • 3 数组形状的改变
    • 4 排序
    • 5 搜索
    • 6 字符串操作
    • 7 组合

numpy基础用法

1 使用其他函数创建数组

import numpy as np
np.arange(0, 10, 1)
np.linspace(1, 10, 10)  # 等差数列
np.linspace(1, 10, 10, endpoint=False)  # endpoint=False最终值不包含
np.linspace(1, 10, 11)
np.zeros([4, 5])  # 4行5列所有值全为0
np.eye(6)  # 创建单位矩阵
np.diag([3, 4])  # 创建对角矩阵,对角元素是3,4
np.ones([2, 3])  # 2行3列所有值全为1

2 花式索引 利用嵌套列表进行索引

import numpy as np
data2 = ((8.5, 6, 4.1, 2, 0.7), (1.5, 3, 5.4, 7.3, 9), (3.2, 4.5, 6, 3, 9), (11.2, 13.4, 15.6, 17.8, 19))
arr2 = np.array(data2)
arr2[[1, 0, 3, 2]]  # 按照第二行,第一行,第四行和第三行进行访问
arr2[[3, 2]]  # 获取第4行和第三行的元素
arr2[[3, 2], [0, 1]]  # 获取(3,0),(2,1) 位置上的元素
arr2[:, [3, 1]]  # 访问第四列和第二列
arr2[:, 1]  # 比较1和[1]的区别,输出格式不一样
arr2[:, [1]]

3 数组形状的改变

# 数组形状的改变

import numpy as np

#1 数组形状的改变
data = ((8.5, 6, 4.1, 2, 0.7), (1.5, 3, 5.4, 7.3, 9), (3.2, 4.5, 6, 3, 9), (11.2, 13.4, 15.6, 17.8, 19))
arr = np.array(data)
arr1 = arr.reshape(10, 2)  # 转换成10行2列,不会直接作用于所操作的数组
arr2=arr.resize((10,2)) # 转换成10行2列,会直接作用于所操作的数组
arr.shape=(10,2) # 转换成10行2列,用shape方法改变,直接作用于所操作的ndarray

# 2展平
arr.ravel()
arr.ravel(order='F')
# order = 'F' 决定展平的顺序,横向还是纵向 • reshape也可以做同样的操作
arr.flatten()
arr.flatten(order='F')  # 作用与上面的一样
arr.reshape(-1)  # 直接用-1进行展平

# 比较一下以下三种用法

arr.reshape(2, -1)  # 2行10列,2维数组
arr.reshape(-1, 1)  # 20行1列,2维数组
arr.reshape(-1, )  # 1维数组

# 通过比较发现,除了flatten,其余两种方式,都会改变原数组的元素,即改变视图返回的结果,但原数组形状不会发生改变
a=arr.reshape(-1, ).ndim
# print(arr.reshape(2, 10))

arr_t = arr.ravel()# 展平

arr_t[np.newaxis,:] #增加一个维度
arr_t[np.newaxis,:].shape

4 排序

# 排序
# 降序建议用sorted函数
import numpy as np

s = np.array([1, 2, 3, 4, 3, 1, 2, 2, 4, 6, 7, 2, 4, 8, 4, 5])
np.sort(s)
np.argsort(s)  # 返回数据从小到大的索引值
sorted(s, reverse=True)
arr1 = np.array([[0, 1, 3], [4, 2, 9], [4, 5, 9], [1, -3, 4]])
np.sort(arr1)
np.sort(arr1, axis=0)  # 0代表沿着行的方向, 1代表沿着列的方向
np.sort(arr1, axis=1)

5 搜索

np.where(amount[:, 1] > 10000, 1, 0)  # 贷款金额大于10000的,赋值为 1,否则为0
np.where(amount[:, 1] > 10000, amount[:, 1], 0)  # 贷款金额大于10000的,赋值为本身,否则为0
doubt = np.extract(data[:, -2] == '可疑', data[:, -4])  # 筛选出贷款五级分类为可疑的贷款,且展示出贷款余额

6 字符串操作

# 列表操作
str_list = ['hello', 'world']

# 字母大写
str_list = [i.upper() for i in str_list]

# 运用numpy.char模块处理
str_arr = np.char.upper(str_list)

# 尽量使用numpy函数处理,比写循环快多了
np.char.add(['中国', '国庆'], ['海军', '大阅兵'])
np.char.multiply(['中国', '万岁'], 3)
np.char.join([':', ';'], ['hello', 'world'])  # 字符串的拆分

data = np.array(data)
# print(data[:,1])
# 去除字符串指定符号
np.char.strip(data[:, 1], ' ')  # 对身份证进行去除空格
data[:, 6]
np.char.replace(data[:, 6], ',', '')  # 使用replace函数去除,为空字符串
np.char.find(data[:, -3], '保证')  # 使用find函数,查看那些贷款是保证

# 先对身份证号码进行空格处理
data[:, 1] = np.char.strip(data[:, 1], ' ')  # 对身份证进行去除空格
np.char.isdigit(data[:, 1])  # 判断身份证号码是不是有数字构成
np.char.isalpha(data[:, 1])  # 判断身份证号码是不是由字母构成
np.char.count(data[:, 1], '1')  # 身份证号码1出现的次数
np.char.startswith(data[:, 2], '沂水农商行')  # 判断金融机构名称是否以沂水农商行开头
np.char.endswith(data[:, 1], 'X')  # 身份证号码是否以X结尾

7 组合

import numpy as np

arr1 = np.arange(12).reshape(3, 4)
arr2 = np.array([[8.5, 6, 4.1, 2, 0.7], [1.5, 3, 5.4, 7.3, 9], [3.2, 4.5, 6, 3, 9]])
# 横向组合
np.hstack((arr1, arr2))
# 行数不变,列数增加
arr3 = np.array([[8.5, 6, 4.1, 0.9], [1.5, 3, 5.4, 1.1], [3.2, 4.5, 6, 7.3], [11.2, 13.4, 15.6, 14.2]])
# 纵向组合
np.vstack((arr1, arr3))

np.concatenate((arr1, arr2), axis=1)  # 1代表横向
np.concatenate((arr1, arr3), axis=0)  # 0代表纵向

你可能感兴趣的:(python,numpy)