Numpy 是 Python 数据科学计算的核心库,提供了高性能的多维数组对象及处理数组的工具。
使用以下语句导入 Numpy 库:
import numpy as np
1、创建数组
a = np.array([1, 2, 3])
b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype=float)
c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype=float)
np.zeros((3, 4)) # 创建值为0数组
np.ones((2, 3, 4), dtype=np.int16) # 创建值为1数组
d = np.arange(10, 25, 5) # 创建均匀间隔的数组(步进值)
np.linspace(0, 2, 9) # 创建均匀间隔的数组(样本数)
e = np.full((2, 2), 7) # 创建常数数组
f = np.eye(2) # 创建2x2单位矩阵
np.random.random((2, 2)) # 创建0-1随机值的数组
np.empty((3, 2)) # 创建空数组
2、数据类型
np.int64 # 带符号的64位整数
np.float32 # 标准双精度浮点数
np.complex # 显示为128位浮点数的复数
np.bool # 布尔值:True值和False值
np.object # Python对象
np.string_ # 固定长度字符串
np.unicode_ # 固定长度Unicode
3、数组信息
a.shape # 数组形状,几行几列
len(a) # 数组长度
b.ndim # 几维数组
e.size # 数组有多少元素
b.dtype # 数据类型
b.dtype.name # 数据类型的名字
b.astype(int) # 数据类型转换
4、调用帮助信息
np.info(np.ndarray.dtype)
5、运算
(1)比较:
a == b # 对比值
array([[False, True, True], [False, False, False]], dtype=bool)
a < 2 # 对比值
# array([True, False, False], dtype=bool)
np.array_equal(a, b) # 对比数组
a * 2 # 乘法
# array([2, 4, 6])
a + np.array([5, 6, 7])
# array([6, 8, 10])
(2)统计函数:
a.sum() # 数组求和
a.min() # 数组最小值
b.max(axis=0) # 数组最大值,按行 array([4., 5., 6.])
b.cumsum(axis=1) # 数组元素的累加值 array([[ 1.5, 3.5, 6.5], [ 4. , 9. , 15. ]])
a.mean() # 平均数
a.std(b) # 标准差
中位数、相关系数只能用np.func:
np.median(a) # 中位数
np.corrcoef(a) # 相关系数
其余函数也可以np.func:
np.sum(a)
np.min(a)
np.max(b, axis=0)
np.cumsum(b, axis=1)
np.mean(a)
np.median(a)
np.corrcoef(a)
np.std(b)
(3)基本运算:
g = a - b # 减法 array([[-0.5, 0., 0.], [-3., -3., -3.]])
np.subtract(a, b)
b + a # 加法 array([[2.5, 4., 6.], [5., 7., 9.]])
np.add(b, a)
a / b # 除法 array([[0.66666667, 1., 1.], [0.25, 0.4, 0.5]])
np.divide(a, b)
a * b # 乘法 array([[1.5, 4., 9.], [4., 10., 18.]])
np.multiply(a, b)
np.exp(b) # 幂
np.sqrt(b) # 平方根
np.sin(a) # 正弦
np.cos(b) # 余弦
np.log(a) # 自然对数
e.dot(f) # 点积 array([[7., 7.], [7., 7.]])
6、数组复制
h = a.view() # 浅拷贝,使用同一数据创建数组视图
np.copy(a) # 深度拷贝
h = a.copy() # 深度拷贝
7、数组排序
a.sort() # 数组排序
c.sort(axis=0) # 以轴为依据对数组排序
8、子集、切片、 索引
遍历和查找同list类似:
a[1] # 2 选择索引1对应的值
a[0:2] # array([1, 2]) 选择索引0和1对应的值
二维 Numpy 数组的子集与list不同:
b[:,0] # array([1.5, 4]) b[rows, columns]
c[1,...] # 等同于 [1,:,:]
b[[1, 0, 1, 0],[0, 1, 2, 0]] # 选择(1,0),(0,1),(1,2) 和(0,0)所对应的值
9、数组操作
(1)转置数组
i = np.transpose(b)
i.T
(2) 改变数组形状
b.ravel() # 拉平数组
g.reshape(3, -2) # 改变数组形状,但不改变数据
b.resize((2,7)) # 返回形状为(2,6)的新数组
(3) 添加或删除值
np.append(h, g) # 追加数据
np.insert(a, 1, 5) # 插入数据 1的位置插入5
np.delete(a, [1, 2]) # 删除数据 删除1,2处的数
(4)合并数组
np.concatenate((a, d),axis=0) # array([ 1, 2, 3, 10, 15, 20])
(5) 分割数组
np.hsplit(a, 3) # 纵向分割数组为3等份 [array([1]), array([2]), array([3])]
np.vsplit(c, 2) # 横向分割数组为2等份 [array([[[ 1.5, 2. , 1. ], [ 4. , 5. , 6. ]]]), array([[[ 3., 2., 3.], [ 4., 5., 6.]]])]
(6) 合并数组
np.r_[e, f] # 纵向以行的维度堆叠数组
np.vstack((e, f)) # 纵向以行的维度堆叠数组
# array([[7., 7.],
# [7., 7.],
# [1., 0.],
# [0., 1.]])
np.hstack((e, f)) # 横向以列的维度堆叠数组
np.column_stack((e, f))
np.c_[e, f] # 横向以列的维度堆叠数组
# array([[7., 7., 1., 0.],
# [7., 7., 0., 1.]])
10、输入/输出
(1)保存与载入磁盘上的文件
np.save('my_array', a)
np.savez('array.npz', a, b)
np.load('my_array.npy')
(2)保存与载入文本文件
np.savetxt("myarray.txt", a, delimiter=" ")
np.loadtxt("myfile.txt")
np.genfromtxt("my_file.csv", delimiter=',')
摘自DataCamp
Learn Python for Data Science Interactively