使用numpy循环遍历不同数量的矩阵

时间:2017-09-14 16:50:46

标签: python numpy matrix

以下是在固定数量的矩阵上演示的功能:

x = np.matrix('0.5')
y = np.matrix('0.5 0.5; 0.5 0.5')
z = np.matrix('0.75 0.25; 0.34 0.66')
output = []

for i in x.flat:
    for j in y.flat:
        for k in z.flat:
            output.append(i * j * k)

我需要帮助在可变数量的矩阵上解决这个问题。我尝试过使用

reduce(np.dot, arr)

但这不是我想做的事。

1 个答案:

答案 0 :(得分:1)

A保持输入矩阵列表时,我们可以迭代地使用np.outernp.outer会使输入自行变平,因此,我们不需要自己做,只需要最后的平整步骤。

因此,解决方案将是 -

A = [x,y,z,w]
out = A[0]
for i in A[1:]:
    out = np.outer(out, i)
out = out.ravel()

请注意,输出将是一个数组。如果需要作为矩阵,只需在最后用np.matrix()包裹它。

4矩阵的样本运行 -

In [38]: x = np.matrix('0.5')
    ...: y = np.matrix('0.15 0.25; 0.35 0.45')
    ...: z = np.matrix('0.75 0.25; 0.34 0.66')
    ...: w = np.matrix('0.45 0.15; 0.8 0.2')
    ...: 
    ...: output = []
    ...: for i in x.flat:
    ...:     for j in y.flat:
    ...:         for k in z.flat:
    ...:             for l in w.flat:
    ...:                 output.append(i * j * k * l)
    ...:                 

In [64]: A = [x,y,z,w]
    ...: out = A[0]
    ...: for i in A[1:]:
    ...:     out = np.outer(out, i)
    ...: out = out.ravel()
    ...: 

In [65]: np.allclose(output, out)
Out[65]: True