numpy.multiply最多可以有3个参数(操作数),有没有办法超过3个?

时间:2017-09-14 19:43:21

标签: python numpy

通过以下示例,我可以确认multiply只能用于最多3个参数:

import numpy as np
w = np.asarray([2, 4, 6])
x = np.asarray([1, 2, 3])
y = np.asarray([3, 1, 2])
z = np.asarray([10, 10, 10])
np.multiply(w, x, y) # works
np.multiply(w, x, y, z) #failed

以下是错误消息:

ValueError                                Traceback (most recent call last)
<ipython-input-14-9538812eb3b4> in <module>()
----> 1 np.multiply(w, x, y, z)

ValueError: invalid number of arguments

有没有办法实现多于3个参数的乘法?我不介意使用其他Python库。

2 个答案:

答案 0 :(得分:1)

您可以使用np.prod来计算给定轴上的数组元素的乘积,这里它(轴= 0),即按行元素乘以:< / p>

np.prod([w, x, y], axis=0)
# array([ 6,  8, 36])

np.prod([w, x, y, z], axis=0)
# array([ 60,  80, 360])

答案 1 :(得分:1)

实际上multiply需要两个数组。它是一个二进制操作。第三个是可选的out。但是作为ufunc,它有一个reduce方法,它采用一个列表:

In [234]: x=np.arange(4)
In [235]: np.multiply.reduce([x,x,x,x])
Out[235]: array([ 0,  1, 16, 81])
In [236]: x*x*x*x
Out[236]: array([ 0,  1, 16, 81])
In [237]: np.prod([x,x,x,x],axis=0)
Out[237]: array([ 0,  1, 16, 81])

np.prod也可以这样做,但请注意axis参数。

使用ufunc更有趣 - 累积:

In [240]: np.multiply.accumulate([x,x,x,x])
Out[240]: 
array([[ 0,  1,  2,  3],
       [ 0,  1,  4,  9],
       [ 0,  1,  8, 27],
       [ 0,  1, 16, 81]], dtype=int32)
In [241]: np.cumprod([x,x,x,x],axis=0)
Out[241]: 
array([[ 0,  1,  2,  3],
       [ 0,  1,  4,  9],
       [ 0,  1,  8, 27],
       [ 0,  1, 16, 81]], dtype=int32)