以下是在固定数量的矩阵上演示的功能:
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)
但这不是我想做的事。
答案 0 :(得分:1)
当A
保持输入矩阵列表时,我们可以迭代地使用np.outer
。 np.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