【发布时间】:2021-04-25 19:10:14
【问题描述】:
如果我有两个矩阵 matrix_a = [[a, b], [c, d]] 和 matrix_b = [[w, x], [y, z]] 我希望找到以下矩阵 matrix_c = [[aw + cy, ax + cz], [bw + dy, bx + d z]] 我怎么能这样做,不仅适用于这种情况,而且适用于任意大小的 matrix_a 和 matrix_b:
a) 最简单地只使用列表理解
b) 最简单地使用一个函数,该函数将两个矩阵 matrix_a 和 matrix_b 作为输入,并返回 matrix_c
c) 和/或其他 Pythonic 方式?
以下代码是我目前的解决方案。
matrix_a = [[1, 1], [2, 1]]
matrix_b = [[25, 1.5], [30, 2.7]]
# so we should obtain matrix_c = [[85, 6.9], [55, 4.2]]
transposed_matrix_a =[list(i) for i in zip(*matrix_a)]
matrix_c = []
for i in range(len(matrix_a[0])):
def matrix_element(function, number):
return [function(number)*matrix_b[number][i] for i in range(len(
matrix_b[0]))]
def t_matrix_a_element(x):
return transposed_matrix_a[i][x]
c_vector = [matrix_element(t_matrix_a_element, i) for i in range(len(
transposed_matrix_a[0]))]
matrix_c.append([sum(i) for i in zip(*c_vector)])
print(matrix_c)
编辑:
明确地说,所需的计算是:
matrix_c = [[aw + cy, ax + cz], [bw + dy, bx + dz]]
matrix_c = [[1 x 25 + 2 x 30, 1 x 1.5 + 2 x 2.7], [1 x 25 + 1 x 30, 1 x 1.5 + 1 x 2.7]]
matrix_c = [[85, 6.9], [55, 4.2]]
而不是产品:
[[aw + by, ax + bz], [cw + dy, cx + d z]]
【问题讨论】:
-
你的代码确实计算了
[[85, 6.9], [55, 4.2]],但我认为不是[[aw + ay, bx + bz], [cw + cy, dx + dz]],应该是[[55, 4.2], [110, 4.2]]。 -
@tevemadar 抱歉,是的,我搞混了,我现在已经编辑了问题,它是 matirx_c = [[aw + cy, ax + cz], [bw + dy, bx + dz] ] 不是 matrix_c = [[aw + ay, bx + bz], [cw + cy, dx + dz]]。谢谢。
标签: python list matrix list-comprehension