注:以下运算的对象a, b, c
均为numpy.ndarray
,并称其为numpy数组
,简称数组
单个数组运算 a.shape = (4, 6)
-
a.sum(axis=0)
:纵向求和,返回数组的shape为(6)
-
a.sum(axis=1)
:横向求和,返回数组的shape为(4)
-
a.sum()
:求和,返回数组所以元素的和
-
a+2, a-2, a*2, a/2, a%2, a//2, a**2
:对数组的每个元素进行相应的运算操作
-
a.T
:转置
两个数组运算
-
a+b
:a、b形状相同,同位置的元素相乘,返回同型数组。其他算术操作符(+, -, *, /, //, %)
同理
-
np.dot(a, b)
:按矩阵运算法则
-
np.vdot(a, b)
:先将a、b展开成行向量,再计算向量的数量积
数组自动扩展及变形a.shape=(4, 6), b.shape=(4, 1), c.shape=(1, 6), d.shape=(6,)
-
a+b
:a的每一列与b相加,其他的算术运算符(+, -, *, /, //, %)
同理
-
a+c
:a的每一行与c相加,其他的算术运算符(+, -, *, /, //, %)
同理
-
np.dot(a, d)
:效果同np.dot(a, d.reshape(6, 1))
三维数组运算
- 在实现机器学习算法的时候,为了优化运算速度,需要将运算向量化,也就是要用到这里的数组运算,有时会出现三维数组的运算。
x = [[[1, 1, 1]],
[[2, 2, 2]]]
a = np.array(x)
w = np.array(x)+1
z = np.array([np.dot(m.T, n) for m, n in zip(a, b)])
z
z.sum(axis=0)/2
array([[[2, 2, 2],
[2, 2, 2],
[2, 2, 2]],
[[6, 6, 6],
[6, 6, 6],
[6, 6, 6]]])
array([[ 4., 4., 4.],
[ 4., 4., 4.],
[ 4., 4., 4.]])
- 这里是简单模拟a、w在每一层上求点积,得到的结果在深度方向上求平均,在神经网络算法中求权重的梯度时经常用到。