我有2个多维数组。我希望将这些数组相乘。
我的两个阵列都有形状:
shape : (3, 100)
我想转换matlab代码:
sum(q1.*q2)
到
np.dot(q1, q2)
给我输出:
ValueError: objects are not aligned
答案 0 :(得分:2)
使用矩阵元产品*
代替dot
产品
以下是尺寸缩小的示例
实施
A = np.random.randint(5,size=(3,4))
B = np.random.randint(5,size=(3,4))
result = A * B
<强>演示强>
>>> A
array([[4, 1, 3, 0],
[2, 0, 2, 2],
[0, 1, 1, 1]])
>>> B
array([[1, 3, 0, 2],
[3, 4, 1, 2],
[3, 0, 4, 3]])
>>> A * B
array([[4, 3, 0, 0],
[6, 0, 2, 4],
[0, 0, 4, 3]])
答案 1 :(得分:1)
当我被要求做的时候我安装了Octave
sum(a .* b)
a
且b
形状为(3, 100)
,返回形状(1, 100)
的数组。 numpy中的确切等价物是:
np.sum(a * b, axis=0)
返回形状(100,)
的数组,或者如果要保留尺寸1的尺寸:
np.sum(a * b, axis=0, keepdims=True)
您可以使用np.einsum
:
np.einsum('ij,ij->j', a, b)