python - 3D 矩阵元素与 2D 矩阵副本的高效逐元素乘法?

标签 python arrays numpy matrix

我想将 MxN 2D 矩阵(例如 A)的每个元素(例如 [i,j])相乘3D 矩阵的 3D 行中的所有元素(例如 B),因此 B[i,j,:]。以下内容没有帮助,因为它给了我一个 (2,3,3) 形状的矩阵,而不是 (3,3,2)。另外,我认为对于这样的乘法来说,制作副本是多余的。有更好的方法吗?

B=np.ones((3,3,2))
A=np.arange(1,10).reshape(3,3)
c=np.tile(A,(2,1,1))
print np.multiply(a,c)

我期望的输出是:

[[[1,1]],[[2,2]],[[3,3]],[[4,4]][[5,5]],[[6,6]],[[7,7]],[[8,8]],[[9,9]]]

最佳答案

如果传递给 array,您的预期输出(添加逗号后)将具有形状 (9, 1, 2)。假设这是一个错误,并且您确实想要一个具有这些值的形状 (3,3,2) 的数组,那么我认为您需要做的就是扩展 A:

>>> A = np.arange(1,10).reshape(3,3)
>>> B = np.ones((3,3,2))
>>> C = A[..., None] * B
>>> C
array([[[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.]],

       [[ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.]],

       [[ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.]]])
>>> C.shape
(3, 3, 2)

关于python - 3D 矩阵元素与 2D 矩阵副本的高效逐元素乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019707/

相关文章:

python - 在 Pandas 中旋转一系列评级列

c - 访问负索引处的数组元素

Java-检查多维数组中的值

python - 任意尺寸的 Numpy 切片

python - 为什么这段代码只能在 python shell 中正确运行

python - `along a specific axis`操作是如何实现的?

python - 在 Mac OS X 上运行 "python"和 "python2.7"有什么区别?

ios - 如何快速循环保存在后台

numpy - 如何解释 numpy.gradient?

numpy - 在 cython 中使用日期时间和 bool