我有一个矩阵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.
但是,上面的代码只输出一个矩阵。
我该如何更改?
答案 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]