Here are two matrices that are multiplied with the result:
1 2 3 10 20 30 40 380 440 500 560 4 5 6 . 50 60 70 80 = 830 980 1130 1280 7 8 9 90 100 110 120 1280 1520 1760 2000 10 11 12 1730 2060 2390 2720
Here is the Python code that multipies the matrices:
product = [[sum(a * b for a, b in zip(aa, bb)) for bb in BT] for aa in A]
Matrix A and matrix BT need to have the same dimensions and the same orientation (rotation). Here is a full example:
A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]
]
B = [
[10, 20, 30, 40],
[50, 60, 70, 80],
[90, 100, 110, 120]
]
BT = list(zip(*B)) # transpose B
assert(len(A) == len(BT)) # assert that dimensions
assert(len(A[0]) == len(BT[0])) # of A and BT are the same
product = [[sum(a * b for a, b in zip(aa, bb)) for bb in BT] for aa in A]
for p in product:
print(p)
[380, 440, 500, 560] [830, 980, 1130, 1280] [1280, 1520, 1760, 2000] [1730, 2060, 2390, 2720]
In an earlier post, I showed how to transpose a matrix with list comprehensions. It turns out that zip(*MATRIX) also transposes a matrix.