【基本工具】S02E03 ndarray 基本运算方法解析

0.本集概览

1.二维数组的转置与内积
2.数组的元素级别运算
3.条件逻辑运算where
4.各轴向上的统计运算
5.布尔数组的运算
6.数组的就地排序

这一集我们主要介绍NumPy中,关于ndarray数组的基本运算。

1.二维数组的转置与内积

二维数组的转置,这里先简单的提一下,这其实是线性代数的内容,我们后面介绍线性代数的内容时还会再提的。
代码片段:

import numpy as np  

arr = np.arange(15).reshape(5,3) 
print(arr) 
print(arr.T)  

运算结果:

[[ 0  1  2]  
 [ 3  4  5]  
 [ 6  7  8]  
 [ 9 10 11]  
 [12 13 14]]  
[[ 0  3  6  9 12]  
 [ 1  4  7 10 13]  
 [ 2  5  8 11 14]]

顺便提一句,线性代数里面另一个最基本的运算,计算矩阵的内积$ x^{T}x$
代码片段:

import numpy as np  

arr = np.arange(6).reshape(3,2) 
print(arr) 
print(arr.T) 
print(np.dot(arr.T,arr))  

运算结果:

[[0 1]  
 [2 3]  
 [4 5]]  

[[0 2 4]  
 [1 3 5]]  

[[20 26]  
 [26 35]]

2.数组的元素级别运算

针对数组元素的元素级别的运算,就是辐射到每个元素,并进行相同的计算过程
代码片段:

import numpy as np  

arr1 = np.array([1,3,5,4,5]) 
arr2 = np.array([4,6,1,3,4])  
print(np.sqrt(arr1)) 
print(np.square(arr2)) 
print(np.multiply(arr1,arr2)) 
print(np.subtract(arr1,arr2))  

运算结果:

[ 1.          1.73205081  2.23606798  2.          2.23606798] 
[16 36  1  9 16] 
[ 4 18  5 12 20] 
[-3 -3  4  1  1]

这里只是举了几个例子,事实上,对于一元运算,可以求一个数组内每个元素的平方、开方、绝对值、指数 $e^{x}$ 等等,所有的运算都可以满足,而二元运算,主要是满足两个向量之间的加减乘除、取最值、比较运算等等。

3.条件逻辑的数组运算:np.where

这个其实功能上类似于python内置列表中的列表解析式,但是其表述更为简洁,在大数据运算方面更快(因为列表解析式的底层是纯python),从例子中可以看出,赋值既可以是标量,也可以是数组形式
代码片段:

import numpy as np  

arr = np.random.randn(4,4) 
print(arr) 
print(np.where(arr>0,2,-2)) 
print(np.where(arr>0,2,arr))  

运行结果:

[[ 0.19699344 -0.6502777  -1.03611804 -0.43403437]  
 [-1.95661572  0.44830588 -0.98746604 -0.57244612]  
 [ 0.44935834 -0.67782579 -0.49945472 -0.46147115]  
 [-0.26284806 -0.4260144   0.43380332 -0.04461859]] 

[[ 2 -2 -2 -2]  
 [-2  2 -2 -2]  
 [ 2 -2 -2 -2]  
 [-2 -2  2 -2]] 

[[ 2.         -0.6502777  -1.03611804 -0.43403437]  
 [-1.95661572  2.         -0.98746604 -0.57244612]  
 [ 2.         -0.67782579 -0.49945472 -0.46147115]  
 [-0.26284806 -0.4260144   2.         -0.04461859]]

4.各轴向上的统计运算

再来说说高维数组各轴向上的统计运算。对一个数组内的值进行求和、均值、方差、标准差、累积、累和以及最值求解,这个也是非常常用的。

在求均值时,如果不指定参数,则是求取全部值的平均值,如果指定关键字参数axis=0,则是沿着纵向求均值,axis=1,沿着横向求均值:
代码片段:

import numpy as np  

arr = np.array([[0,1,2],[3,4,5],[6,7,8]]) 
print(arr.mean()) 
print(arr.mean(axis=0)) 
print(arr.mean(axis=1))  
top Created with Sketch.