首页 > 解决方案 > 多个 numpy 2d 数组的元素乘法

问题描述

为了简化我的问题,假设我有这些数组:

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[2, 2, 2], [3, 3, 3]])
c = np.array([[1, 1, 3], [4, 1, 6]])

我想对它们使用逐元素乘法,因此结果将是:

array([[  2,   4,  18],
       [ 48,  15, 108]])

我知道我可以做到a*b*c,但是如果我有很多 2d 数组或者我不知道数组的数量,那将不起作用。我也知道,numpy.multiply但这仅适用于 2 个数组。

标签: pythonnumpynumpy-ndarrayarray-broadcastingelementwise-operations

解决方案


使用stackprod

stack将创建一个可以prod沿轴减少的数组。

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[2, 2, 2], [3, 3, 3]])
c = np.array([[1, 1, 3], [4, 1, 6]])

unknown_length_list_of_arrays = [a, b, c]

d1 = a * b * c
stacked = np.stack(unknown_length_list_of_arrays)
d2 = np.prod(stacked, axis=0)

np.testing.assert_equal(d1, d2)

推荐阅读