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则会返回一个排好序的副本,并不会在本地对数组进行排序修改。

利用本地排序可以比较容易的获取指定的百分位数。

 
posted @ 2018-06-28 10:25  purplelavender  阅读(254)  评论(0)    收藏  举报