我很難找到一個非常簡單的程式,它可以遞回地將兩個 2x2 矩陣相乘。誰能幫我嗎?只需要相乘X和Y不numpy使用或使用嵌套回圈。
X = [[1, 2],
[2, 3]]
Y = [[2, 3],
[3, 4]]
FWIW - 這是我天真的方法:)
X = [[1, 2],
[2, 3]]
Y = [[2, 3],
[3, 4]]
result = [[0, 0],
[0, 0]]
for i in range(len(X)):
for j in range(len(Y[0])):
for k in range(len(Y)):
result[i][j] = X[i][k] * Y[k][j]
for r in result:
print(r)
# ANS = [8, 11], [13, 18]
_________________________ 根據下面的評論 - Recursive Strassen 的
import numpy as np
def split(matrix):
row, col = matrix.shape
row2, col2 = row // 2, col // 2
return matrix[:row2, :col2], matrix[:row2, col2:], matrix[row2:, :col2], matrix[row2:, col2:]
def strassen_recur(x, y):
if len(x) == 1:
return x * y
a, b, c, d = split(x)
e, f, g, h = split(y)
p1 = strassen_recur(a, f - h)
p2 = strassen_recur(a b, h)
p3 = strassen_recur(c d, e)
p4 = strassen_recur(d, g - e)
p5 = strassen_recur(a d, e h)
p6 = strassen_recur(b - d, g h)
p7 = strassen_recur(a - c, e f)
c1 = (p5 p4 - p2 p6)
c2 = (p1 p2)
c3 = (p3 p4)
c4 = (p1 p5 - p3 - p7)
c = np.vstack((np.hstack((c1, c2)), np.hstack((c3, c4))))
return c
print(strassen_recur(x, y))
我也寫了一個幼稚的 Strassen 方法。但就像我提到的那樣,我只是希望有人能快速向我展示一些東西,這樣我就不必花費大量時間來弄清楚它。都很好。
uj5u.com熱心網友回復:
如果有人一直在尋找遞回解決方案來乘以兩個 2x2... 或 3x3、4x4 的矩陣,這就是答案。您只需要更改行數/列數并添加額外的 for 回圈。這不是最漂亮的,但它確實有效。也許有人可以讓它變得更好?
X = [[1, 2],
[2, 3]]
Y = [[2, 3],
[3, 4]]
result = [[0, 0],
[0, 0]]
i = 0
j = 0
k = 0
def multiplyMatrixRec(row1, col1, X, row2, col2, Y, result):
if j < col2:
if k < col1:
result[i][j] = X[i][k] * Y[k][j]
k = 1
multiplyMatrixRec(row1, col1, X, row2, col2, Y, result)
j = 1
multiplyMatrixRec(row1, col1, X, row2, col2, Y, result)
i = 1
multiplyMatrixRec(row1, col1, X, row2, col2, Y, result)
def multiplyMatrix(row1, col1, X, row2, col2, Y):
for i in range(row1):
for j in range(col2):
print(result[i][j], end=" ")
print()
row1 = 2
col1 = 2
row2 = 2
col2 = 2
multiplyMatrix(row1, col1, X, row2, col2, Y)
輸出:
8 11
13 18
干杯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475131.html
