numpy.array 中的运算


简单运算

  现在有有个需求,给定一个数组,让数组中每一个数乘以2,怎么做呢

n = 10 
L = [i for i in range(n)] 
L  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 * L   # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

A = [] 
for e in L: 
    A.append(2*e) 
A  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

L = np.arange(n) 
2 * L 
# array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

各种写法性能比较

n = 1000000 
L = [i for i in range(n)]

%%time 
A = [] 
for e in L: 
    A.append(2*e) 
"""
CPU times: user 253 ms, sys: 30 ms, total: 283 ms 
Wall time: 303 ms
"""

%%time 
A = [2*e for e in L] 
"""
CPU times: user 93.6 ms, sys: 25.8 ms, total: 119 ms 
Wall time: 128 ms
"""

L = np.arange(n) 
%%time 
A = np.array(2*e for e in L)
"""
CPU times: user 15.1 ms, sys: 8.97 ms, total: 24.1 ms 
Wall time: 24.8 ms
"""

%%time 
A = 2 * L 
"""
CPU times: user 15.1 ms, sys: 8.97 ms, total: 24.1 ms 
Wall time: 24.8 ms
"""

NumPy’s UFuncs (Universal Functions) 

  全称通用函数(universal function),是一种能够对数组中所有元素进行操作的函数

  • 四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**):数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同
  • 比较运算:>、<、==、>=、<=、!=  :比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。
  • 逻辑运算:np.any函数表示逻辑“or”,np.all函数表示逻辑“and”  :运算结果返回布尔值
X = np.arange(1, 16).reshape((3, 5)) 
"""
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]])
"""
# 每个元素 + 1
X + 1
# 每个元素 - 1
X - 1
# 每个元素 * 2
X * 2 
# 每个元素 / 2
X / 2 
# 每个元素的平方
X ** 2 
# 求余
X % 2
# 倒数
1 / X 

还有下面等一系列方法

np.abs(X)
np.sin(X)
np.cos(X)
np.tan(X)
np.arctan(X)
np.exp(X)
np.exp2(X)
np.power(3, X)
np.log(X)
np.log2(X)
np.log10(X)

矩阵间运算

A = np.arange(4).reshape(2, 2) 
B = np.full((2, 2), 10) 
A + B 
A - B 
# ×乘,每个对应位置相乘
A * B 
# .乘,C11 = A的第一行*B的第一列,先乘后加
A.dot(B) 
# 转置
A.T 
# 返回自身的共轭转置
A.H
# 返回自身的逆矩阵
A.I
# 返回自身数据的2维数组的一个视图
A.A

向量和矩阵的运算 

加法

A = np.arange(4).reshape(2, 2) 
v = np.array([1, 2]) 
v + A
"""
array([[1, 3],
       [3, 5]])
"""

乘法

v * A 
"""
array([[0, 2],
       [2, 6]])
"""
v.dot(A)  # array([4, 7])
A.dot(v)  # array([2, 8])   

矩阵的逆与伪逆

矩阵的逆

B = np.linalg.inv(A) 
A.dot(B) 
"""
array([[1., 0.],
       [0., 1.]])
"""

矩阵的伪逆

X = np.arange(16).reshape((2, 8)) 
pinvX = np.linalg.pinv(X) 
X.dot(pinvX) 
"""
array([[ 1.00000000e+00, -2.77555756e-16],
       [ 1.69309011e-15,  1.00000000e+00]])
"""

  矩阵的伪逆又被称为“广义逆矩阵”

Numpy 中arg运算

x = np.random.normal(0, 1, 1000000) 
np.argmin(x) #获取最小值的下标 
np.argmax(x) 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM