【问题标题】:Numpy: How to multiply (N,N) and (N,N,M,M) numpy arrays?Numpy:如何将 (N,N) 和 (N,N,M,M) numpy 数组相乘?
【发布时间】:2020-03-28 06:05:32
【问题描述】:

我想将 两个 numpy 数组相乘。一个 numpy 数组由形状 (10, 10) 的矩阵给出,另一个由矩阵矩阵给出,即形状 (10, 10, 256, 256) .

我现在只想将第二个矩阵中的每个矩阵与第一个矩阵中的相应分量相乘。例如,第二个矩阵中位置 (0, 0) 的矩阵乘以第一个矩阵中位置 (0, 0) 的值。

直观地说,这并不复杂,但 numpy 似乎不支持这一点。或者至少我不够聪明,无法让它发挥作用。抛出的 ValueError 说:

ValueError: 操作数无法与形状 (10,10) (10,10,256,256) 一起广播

请问有谁能帮帮我吗?我怎样才能以一种 numpyy 的方式实现我想要的。

【问题讨论】:

  • 能否请您分享您的代码,或者最好提供一个可重现的最小示例,以便我们了解那里发生了什么。
  • 你的意思是元素乘法吗?
  • 根据广播规则,你必须明确扩展A的维度:A[:,:,None,None]*B。查看broadcasting 并练习一下。

标签: python arrays numpy matrix multidimensional-array


【解决方案1】:

您可以使用 NumPy einsum 函数,例如(在本例中使用 zeros 数组作为虚拟对象):

import numpy as np
x = np.zeros((10, 10))
y = np.zeros((10, 10, 256, 256))
z = np.einsum("ij,ijkm->km", x, y)
print(z.shape)
(256, 256)

请参阅here,了解einsum 的用法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多