如何在NumPy中一次乘以3个以上的向量

时间:2019-04-09 18:50:24

标签: python numpy multidimensional-array numpy-ndarray multiplying

我正在寻找一种矢量化的方法来在NumPy中乘以3个以上的向量。

例如,

X = np.array([1,2,3])
Y = np.array([4,5,6])
Z = np.array([7,8,9])


Multiply([X,Y,Z])

将作为输出产生

np.array([28, 80, 162])

我要乘的向量不必像上面那样单独定义。例如,它可能是矩阵的行(或列),在这种情况下,我想将这种矩阵的所有行(或列)相乘。

帮助表示赞赏:)

3 个答案:

答案 0 :(得分:2)

您可以使用ufunc的reduce方法:

>>> np.multiply.reduce((X, Y, Z))                                                                                                                                                                                                                        
array([ 28,  80, 162])

这里发生的是,从功能上看,功能类似的ufunc np.multiply实际上是类numpy.ufunc的实例;所有ufunc都具有four special methods,其中一个是.reduce(),在这种情况下,它会执行您要查找的内容,并从多个相同长度的1d数组中产生1d结果。

默认轴为0;默认为0。如果要沿另一个轴工作,只需指定:

>>> np.multiply.reduce((X, Y, Z), axis=1)                                                                                                                                                                                                                
array([  6, 120, 504])

答案 1 :(得分:2)

您可以使用numpy.prod,后者使用multiply.reduce


>>> np.prod([X, Y, Z], 0)
array([ 28,  80, 162])

>>> np.prod([X, Y, Z], 1)
array([  6, 120, 504])

答案 2 :(得分:0)

或者非常简单地使用常用的*表示法:

In [180]: X * Y * Z
Out[180]: array([ 28,  80, 162])

通常,您可以根据需要使用任意数量的数组:

In [181]: X * Y * Z * X * Y * Z
Out[181]: array([  784,  6400, 26244])