【问题标题】:Unexpected output in for loopfor循环中的意外输出
【发布时间】:2015-07-01 14:07:24
【问题描述】:

我有一个矩阵 M

type(M) = numpy.ndarray
M.shape = (500,500)

还有一个包含 100 个值的数组

arr = numpy.arange(100)

我想将矩阵 M 形 (500,500) 乘以 arr 中的每个值。也就是说,每个矩阵条目都乘以arr 中的一个值,结果输出将是一个包含 100 个矩阵的数组。

对于arr 中的每个值,将该值乘以矩阵,并创建一个结果数组,即[M1 M2 ... M99 M100]

我会将其编码为

import numpy as np

for i in arr:
    x = np.asarray( i * M)

我希望结果 x 是一个类似 [M1 M2 ... M99 M100] 的数组,一个由 100 个矩阵组成的数组,形状为 500 x 500。

但是,上面的代码只输出一个矩阵。

我该如何更改?

【问题讨论】:

  • 嗯,我看不出你在哪里创建一个 np 数组,你只是用你的新数组覆盖x
  • 试试x = [M * a for a in arr]

标签: python arrays numpy matrix


【解决方案1】:

循环的每个步骤都会覆盖 x。如果要创建一个 3 维数组(500,500,100),可以通过以下几种方式进行:

广播(可能是最有效的):

>>> res = M[:, :, None] * arr[None, None, :]
>>> res.shape
(500L, 500L, 100L)

创建一个输出数组并填充它:

>>> res = np.empty((500, 500, 100))
>>> for i in arr:
...     res[:, :, i] = M * i

或者创建一个矩阵列表(虽然直接数组转换会变成(100, 500, 500)

>>> res = [M * i for i in arr]

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多