NumPy:一个二维矩阵的按行乘积

3

我想对一个二维矩阵进行逐行乘法,例如使用二维数组x实现:

>>> x = np.column_stack((np.ones(10), np.arange(1,11)))
>>> x
array([[ 1.,  1.],
       [ 1.,  2.],
       [ 1.,  3.],
       [ 1.,  4.],
       [ 1.,  5.],
       [ 1.,  6.],
       [ 1.,  7.],
       [ 1.,  8.],
       [ 1.,  9.],
       [ 1., 10.]])

一个包含1到10的数组。我在这里这里找到了可以使用np.multiply(),并将我的数组的每一列作为输入。然而,我想要一个适用于具有超过两列的2-D数组的通用解决方案。我的目标是使用矩阵/数组本身作为输入,并获得所有列的行乘积。

2个回答

5
你可以使用 np.multiply.reduce 来沿第二个轴应用 np.multiply 并将其维度减少 1
np.multiply.reduce(x, axis=1)
# array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
这适用于任何二维数组:
x = np.arange(30).reshape((-1, 3))

array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [21, 22, 23],
       [24, 25, 26],
       [27, 28, 29]])

np.multiply.reduce(x, axis=1)
# array([    0,    60,   336,   990,  2184,  4080,  6840, 10626, 15600, 21924])

非常感谢!那与下面的Dev Khadka的答案有何不同?它们在CPU时间上表现相同,但输出在视觉上似乎有所不同。 - undefined
np.multiply.reducenp.prod都应该表现得一样好。@bruno - undefined
我明白了,非常感谢! - undefined

1
这是你想要的吗?
x = np.column_stack((np.ones(10), np.arange(1,11)))
np.prod(x, axis=1, keepdims=True)

输出

array([[ 1.],
       [ 2.],
       [ 3.],
       [ 4.],
       [ 5.],
       [ 6.],
       [ 7.],
       [ 8.],
       [ 9.],
       [10.]])

那与yatu下面的答案有什么不同呢?你们两个的答案在CPU时间上都表现得一样好... - undefined
np.multiply是一个“ufunc”,用于将两个数组相乘,使用reduce函数重复使用同一个数组进行乘法操作,直到得到单一值。np.prod是一个方便的函数,它可能在内部使用np.multiply函数。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,