Multiplying two matrixes can be done easily with numpy. But did you know Python can do it in one line of code with list comprehensions?

# Matrix multiplication with Python list comprehensions.

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)```

## Result:

```[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.

Written by Loek van den Ouweland on 2021-12-03.
Questions regarding this artice? You can send them to the address below.