python - 将 numpy 数组的列与另一个数组相加和相乘

标签 python arrays numpy

我有一个 2D numpy 数组 x1D 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/

相关文章:

python - 我有一个 python 函数可以在脚本运行后重置脚本吗?

javascript - 如何找到数组中具有特定值的对象的索引?

python - Numpy 唯一 : count for values also not in array?

arrays - python : append to numpy array

python - axvline 中的线宽是做什么的?

python - 具有继承性的 SQLAlchemy 自省(introspection)列类型

python - 如何在 python 中跳过单个循环迭代?

vb.net - 将内存中的字节复制到 VB.NET 中的数组

python - 读入 np 数组不起作用

python - 将numpy矩阵转换为嵌套字典的有效方法