numpy模块之数组运算
二维数组的转置
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]]
一些常用运算
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]
条件逻辑的数组运算:np.where
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]]
求均值
在求均值时,如果不指定参数,则是求取全部值的平均值,如果指定关键字参数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)) 4.0 [ 3. 4. 5.] [ 1. 4. 7.]
求和
import numpy as np arr = np.array([[0,1,2],[3,4,5],[6,7,8]]) print(arr.sum()) print(arr.sum(axis=0)) print(arr.sum(axis=1)) 36 [ 9 12 15] [ 3 12 21]
累和、累积
注意得到的是一个中间向量,而不是一个值
import numpy as np arr = np.array([[0,1,2],[3,4,5],[6,7,8]]) print(arr.cumsum(axis=0)) print(arr.cumprod(axis=1)) [[ 0 1 2] [ 3 5 7] [ 9 12 15]] [[ 0 0 0] [ 3 12 60] [ 6 42 336]]
布尔数组的求和
import numpy as np arr = np.random.randn(10) print(arr) print((arr>0).sum()) [-1.81692025 -0.04830079 -1.52511841 0.40788744 -0.17000841 0.16426966 0.13271131 1.21298754 0.9206151 -1.00320183] 5
布尔数组的与、或运算
import numpy as np bools = np.array([False,False,True,False]) print(bools.any()) print(bools.all()) True False
数组的就地排序
这个和python内置列表类型一样,可以通过sort方法就地排序
import numpy as np arr = np.random.randn(5) print(arr) arr.sort() print(arr) [ 0.31665043 1.76497754 0.19695847 0.3717157 1.16233139] [ 0.19695847 0.31665043 0.3717157 1.16233139 1.76497754]
多维数组沿着某一个轴向进行排序
import numpy as np arr = np.random.randn(5,3) print(arr) arr.sort(axis=1) print(arr) [[ 0.21721306 0.57932052 -1.86266246] [-0.16954323 0.53703463 -0.82359951] [-2.08265881 0.22894332 -1.71529687] [ 0.10172732 0.89584416 1.14315116] [ 0.7074438 -1.11062283 0.57065222]] [[-1.86266246 0.21721306 0.57932052] [-0.82359951 -0.16954323 0.53703463] [-2.08265881 -1.71529687 0.22894332] [ 0.10172732 0.89584416 1.14315116] [-1.11062283 0.57065222 0.7074438 ]]
需要注意的是,如果调用顶层方法np.sort则会返回一个排好序的副本,并不会在本地对数组进行排序修改。
利用本地排序可以比较容易的获取指定的百分位数。

浙公网安备 33010602011771号