如何用不同维数的2numpy数组相乘

2024-06-07 00:57:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将2个矩阵x,y乘以形状(41)和(41,6) 因为它应该向多维中的每个箭头广播单个矩阵

我想这样做:

x*y

但我知道这个错误

ValueError: operands could not be broadcast together with shapes (41,6) (41,) 

有什么我错过的吗?


Tags: 错误withnot矩阵be箭头couldbroadcast
3条回答

你可以试试这个,会有用的!

>>> import numpy as np
>>> x = np.array([[1, 2], [1, 2], [1, 2]])
>>> y = np.array([1, 2, 3])
>>> np.dot(y,x)
array([ 6, 12])

不太清楚,你想达到什么目标。也许你可以举一个例子来说明你的投入和预期的产出。一种可能性是:

import numpy as np

x = np.array([[1, 2], [1, 2], [1, 2]])
y = np.array([1, 2, 3])
res = x * np.transpose(np.array([y,]*2))

这将把x的每一列乘以y,因此上述示例的结果是:

array([[1, 2],
       [2, 4],
       [3, 6]])

广播包括两个步骤

  • 为所有数组提供相同的维数

  • 展开1维度以匹配其他数组

你的投入

(41,6) (41,)

一个是2d,另一个是1d;广播可以将1d更改为(1, 41),但不会自动向另一个方向展开(41,1)

(41,6) (1,41) 

(41,41)和(6,41)都不匹配。

所以你需要把y改成(41,1),或者把x改成(6,41)

x.T*y
x*y[:,None]

当然,我假设您需要逐元素乘法,而不是np.dot矩阵乘积。

相关问题 更多 >