for循环中的意外输出

时间:2015-07-01 14:07:25

标签: python arrays numpy matrix

我有一个矩阵M

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

和一个包含100个值的数组

arr = numpy.arange(100)

我想将(500,500)中的每个值乘以矩阵M形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乘500.

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

我该如何更改?

1 个答案:

答案 0 :(得分:1)

循环的每个步骤都会覆盖x。如果要创建三维数组(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]