ndarray
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1) # 将list转化为ndarray
np.zeros(10) # 创建0向量
np.ones((3, 6)) # 创建1向量,传入参数是表示形状的元组
np.ones_like(data1) # 根据data1的形状创建1向量, zeros_loke同理
np.arrange(15) # range的numpy版本
np.eye(10) # 创建一个nxn单位阵,identity同理
arr1.astype(np.int64) # 将arr1转换为int64类型的数组
arr2 = np.ones((10, 10, 10))
arr2[:, :, 3] # 取第三维为3的元素
arr2.ravel() # 降成1维数组
切片
# numpy的切片是原数组的视图,不会复制
arr_silce = arr1[1:2] # 是引用
arr_copy = arr1[1:2].copy() # 调用copy()进行复制
arr3d = np.ones((5,5,5)) # 三维向量
arr3d[0][2] # 等价于arr2d[0, 2]
arr3d[0] = 42 # 将42赋值给所有对应的位置
arr3d[:, 1:]
arr3d[1, :2] # 多维切片,用逗号隔开
转置
arr.T
arr.transpose()
# 转置返回的是视图,不是复制
arr = np.arange(16).reshape((2,2,4))
arr.transpose((1, 0, 2)) # 高维转置需传入轴编号
arr.swapaxes(1,2) # 转置对应轴
通用函数
ufunc,对ndarray执行元素级运算的函数
arr = np.arange(10)
np.sqrt(arr)
np.exp(arr)
#np.where, if else
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
result = np.where(cond, xarr, yarr) # 根据cond条件选择xarr或yarr
数学统计方法
arr = np.random.randn(5, 4) # 正态分布的数据
arr.mean(axis=1) # 等价于np.mean(axis=1), 求均值
arr.sum() # 求和,布尔型会转换为0/1,可以用来计算True的个数
bools = np.array([True, False, False, True])
bools.any() # 是否有一个True
bools.all() # 是否都是True
arr.sort(1) # 就地排序,改变数据本身,传入参数为轴
np.sort(arr) # 创建副本
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
np.unique(names) # 唯一化, ['Bob', 'Joe', 'Will']
np.in1d(names, ['Bob', 'Joe']) # 判断names的成员在不在第二个数组中,[True, True, False, True, False, True, True]
文件存储
数据默认以二进制方式存储
arr = np.arange(10)
np.save('some_array', arr) # 会自动加后缀npy
np.load('some_array.npy')
np. savez(' array_archive. npz', a= arr, b= arr) # 将多个数组保存到一个文件中
arch = np.load('array_archive.npz')
arch['b'] # 使用key来获取对应数组
线性代数
samples = np.random.normal(size=(4, 4)) # 生成标准4x4正态分布