这里介绍NumPy数组的常用操作

基本运算
逐元素运算
运算符将操作应用于数组中的每个元素,而不是把整个数组作为一个整体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| a = np.array([100,200,300]) b = np.array([1,2,3])
print(a+b)
print(a-b)
print(a/b)
print(a*b)
m = np.array([1,2,3]) n = np.array([9,3,2]) print(m**n)
|
向量点乘
当操作数均为 一维数组(向量) 时,可通过下述方式进行向量的点乘(内积)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import numpy as np
v1 = np.array([6,7,8]) v2 = np.array([3,1,2])
print(np.matmul(v1,v2))
print(v1@v2)
print(v1.dot(v2))
|
矩阵乘法
当操作数均为 二维数组(矩阵) 时,可通过下述方式进行矩阵的乘法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import numpy as np
c = np.array([[1,2,3],[4,5,6]]) d = np.array([[1,2],[3,4],[5,6]]) print(c)
print(d)
print(np.matmul(c,d))
print(c@d)
print(c.dot(d))
|
统计分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| import numpy as np
num = np.arange(12).reshape(2,6) print(num)
print(num.min())
print(num.max())
print(num.sum())
print(num.mean())
print(np.median(num))
print(np.std(num))
print(np.var(num))
|
比较运算
比较运算符:会在数组上逐运算进行比较。并产生一个具有相同形状的布尔数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import numpy as np
num = np.array([[4,-8,2],[-1,-9,4]]) print(num)
print(num>0)
print(num==4)
|
数组查找
nonzero函数
返回数组中非零元素的索引信息。具体地:该函数的结果 使用多个索引数组来依次为各维度指定索引,然后通过元组将多个维度的索引数组组合到一起
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import numpy as np
num = np.array([ [0,0,23,np.inf], [48,0,np.nan,0] ])
print( np.nonzero(num) )
print(num[0][2])
print(num[0][3])
print(num[1][0])
print(num[1][2])
|
argmin函数
返回数组中最小值的索引。当axis参数未指定时,则会将数组展平为一维数组进行查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import numpy as np
num = np.array([ [61,19,23,21], [38,27,26,72], [48,37,16,25], ])
print(np.argmin(num))
print(np.argmin(num, axis=0))
print(np.argmin(num, axis=1))
|
argmax函数
返回数组中最大值的索引。当axis参数未指定时,则会将数组展平为一维数组进行查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import numpy as np
num = np.array([ [61,19,23,21], [38,27,26,72], [48,37,16,25], ])
print(np.argmax(num))
print(np.argmax(num, axis=0))
print(np.argmax(num, axis=1))
|
nanargmin/nanargmax函数
由于np.nan值(非数字)的特殊性。故 argmin/argmax 函数的结果是第一个np.nan值的索引。而 nanargmin/nanargmax 函数在功能上与argmin/argmax函数一样,但在计算时会忽略np.nan值。当axis参数未指定时,则会将数组展平为一维数组进行查找
1 2 3 4 5 6 7 8 9 10 11 12 13
| import numpy as np
num = np.array([-1, np.nan, 7, 2, np.nan, 6, 81])
print(np.argmin(num))
print(np.argmax(num))
print(np.nanargmin(num))
print(np.nanargmax(num))
|
argsort函数
返回数组中元素按升序排序的索引。axis参数默认值为-1,即最后一个轴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import numpy as np
num = np.array( [ [41,17,23,14], [19,93,22,13] ] )
sort_index_col = np.argsort(num, axis=0) print(sort_index_col)
sort_index_row = np.argsort(num, axis=1) print(sort_index_row)
|
where函数
用于查找满足条件的元素,并返回这些元素的索引信息。具体地:该函数的结果:该函数的结果 使用多个索引数组来依次为各维度指定索引,然后通过元组将多个维度的索引数组组合到一起
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import numpy as np
num = np.array( [ [5,3,4], [1,2,6] ] )
index = np.where(num>3) print(index)
print(num[0][0])
print(num[0][2])
print(num[1][2])
|
此外,当同时提供三个参数 np.where(条件,x,y) 时,则会返回一个与原数组相同形状的数组。其中,满足指定条件的元素的位置处用x填充,不满足指定条件的元素的位置处用y填充
1 2 3 4 5 6 7 8 9 10 11 12 13
| import numpy as np
num = np.array( [ [5,3,4], [1,2,6] ] ) res = np.where(num>3, 996, -520) print(res)
|
argwhere函数
用于查找满足条件的元素,并返回这些元素的索引信息。但其与where函数返回结果的形式不同,其返回的是一个二维数组。其中,每一行是满足条件的元素的各维度索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import numpy as np
num = np.array( [ [5,3,4], [1,2,6] ] ) index = np.argwhere(num>3) print(index)
print(num[0][0])
print(num[0][2])
print(num[1][2])
|