[英]Numpy dot product of 3D arrays with shapes (X, Y, Z) and (X, Y, 1)
[英]Dot product with shapes (x) and (x, y)
我真的对numpy陌生,因此在理解点积时遇到了一些麻烦。
我有这段简单的代码:
import numpy as np
A = np.ones((5))
B = np.ones((5,10))
A.dot(B)
# array([ 5., 5., 5., 5., 5., 5., 5., 5., 5., 5.])
A.dot(B).shape
# (10,)
我不明白这段代码中发生了什么。 我有点困惑,因为(10,)
的形状似乎不是列向量,因为转置是相同的。
A
正在广播吗? 我认为应该将A
广播为(5,5)
的形状,因此可以将其乘以B
并返回一个形状为(5,10)
的数组。 我怎么了?
Numpy在1d数组(形状为(N,)
东西)和2d数组(矩阵)具有一列(形状(N, 1)
)或一行(形状(1, N)
又称为列或行(1, N)
之间产生差异。向量。
>>> a = np.ones((5, 1))
>>> B = np.ones((5, 5))
>>> B.dot(a)
array([[ 5.],
[ 5.],
[ 5.],
[ 5.],
[ 5.]])
或用numpy 1.10取消安装python 3.5:
>>> a = np.ones((5, 1))
>>> B = np.ones((5, 5))
>>> B @ a
array([[ 5.],
[ 5.],
[ 5.],
[ 5.],
[ 5.]])
如果具有一np.newaxis
数组,则可以使用np.newaxis
使其成为行或列向量:
>>> a = np.ones(5)
>>> B = np.ones((5, 5))
>>> B @ a[:, np.newaxis]
array([[ 5.],
[ 5.],
[ 5.],
[ 5.],
[ 5.]])
新的行和列:
>>> x = np.arange(5)
>>> B = x[:, np.newaxis] @ x[np.newaxis, :]
>>> B
array([[ 0, 0, 0, 0, 0],
[ 0, 1, 2, 3, 4],
[ 0, 2, 4, 6, 8],
[ 0, 3, 6, 9, 12],
[ 0, 4, 8, 12, 16]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.