【问题标题】:Matching Matrix sizes for matrix math矩阵数学的匹配矩阵大小
【发布时间】:2020-03-18 20:20:35
【问题描述】:

我正在尝试使用 numpy 执行矩阵数学。我有一个 2x2x401 矩阵,我正在尝试使用 np.add() 添加到单位矩阵中。在代码中,我尝试过:

result = []
self.data = x #where x is a 2x2x401 np array
z_sqrt = np.identity(2)
for x in range(401):
    result.append(np.add(z_sqrt,self.data[:][:][x]))
    #if the above gives me errors because of how I'm assigning it, I'm not there yet

我得到的错误是:

ValueError: operands could not be broadcast together with shapes (2,2) (2,401)

【问题讨论】:

  • 你能在 python for 循环中显示你的意图吗?我不确定你期望得到什么结果。另外,请尽量减少示例。如果一个轴没有 400 多个元素,显示会容易得多
  • @MadPhysicist 在 python 循环中显示我的意图是什么意思?
  • 目前还不清楚您期望得到什么结果。通常遇到这类问题,人们会写出实现他们期望的嵌套 for 循环,以避免任何可能的歧义。然后,我将向您展示如何对循环进行矢量化。
  • [:] 什么都不做。如果要迭代 3d 数组的最后一个维度,请使用data[:, :, x]

标签: python numpy matrix matrix-multiplication


【解决方案1】:

请尝试以下可能有帮助的方法,

result = x + np.atleast_3d(np.identity(2))

x 是您的 (2,2,401) 数组。以上应该直接在整个数组上工作,而不使用 for 循环,因此您可以在单行中获得形状为 (2,2,401) 的result。或者,您也可以尝试以下方法,

result = x + (np.identity(2)[:,:,np.newaxis])

【讨论】:

  • 当你说不使用循环时,你不是指我用来循环 401 次的 for 循环,对吗?
  • 是的,我的意思是您在示例中使用的 for 循环 (for x in range(401)...)。上面的解决方案应该直接给你result 数组。为了更清楚,我已经编辑了答案
  • 嗯,我没有考虑在我的矩阵计算中包含第三个轴。谢谢!
  • 欢迎您,也请不要忘记为答案投票:)
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多