我有一个 2D
numpy
数组 x
和 1D
numpy
数组y
:
import numpy as np
x = np.arange(12).reshape((4, 3))
y = np.array(([1.0,2.0,3.0,4.0])
我想将列向量 y.reshape((4,1))
与 x
的每一列相乘/相加。我尝试了以下操作:
y1 = y.reshape((4,1))
y1 * x
产量
array([[ 0., 1., 2.],
[ 6., 8., 10.],
[ 18., 21., 24.],
[ 36., 40., 44.]])
这就是我想要的。我还发现了
array([[ 1., 2., 3.],
[ 5., 6., 7.],
[ 9., 10., 11.],
[ 13., 14., 15.]])
与y1 + x
。
我想知道是否有更好(更有效)的方法来实现同样的事情!
最佳答案
NumPy 通过广播支持这一点。您的代码使用了广播,这是最有效的方法。我通常写成:
>>> x * y[..., np.newaxis]
array([[ 0., 1., 2.],
[ 6., 8., 10.],
[ 18., 21., 24.],
[ 36., 40., 44.]])
要查看它是否等效:
>>> z = y[..., np.newaxis]
>>> z.shape
(4, 1)
您还可以看到 NumPy 不会复制任何数据,它只是在内部更改同一内存上的迭代
>>> z.base is y
True
在此处阅读更多内容
关于python - 将 numpy 数组的列与另一个数组相加和相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29087701/