import numpy as np
import numba
a = np.random.randn(200, 200)
b = np.random.randn(200, 200)
def matmul1(a, b):
lenI = a.shape[0]
lenJ = a.shape[1]
lenK = b.shape[1]
c = np.zeros((lenI, lenJ))
for i in range(lenI):
for j in range(lenJ):
for k in range(lenK):
c[i, j] += a[i, k] * b[k, j]
return c
@numba.jit
def matmul1_jit(a, b):
lenI = a.shape[0]
lenJ = a.shape[1]
lenK = b.shape[1]
c = np.zeros((lenI, lenJ))
for i in range(lenI):
for j in range(lenJ):
for k in range(lenK):
c[i, j] += a[i, k] * b[k, j]
return c
c = matmul1_jit(a, b) # åˆå›žã¯é…ã„ã®ã§å›žé¿
%timeit matmul1(a, b)
1 loops, best of 3: 12.9 s per loop
%timeit matmul1_jit(a, b)
10 loops, best of 3: 24.4 ms per loop
%timeit np.dot(a, b)
10 loops, best of 3: 20.7 ms per loop