简介
本文描述一种使用numba加速任意大小矩阵的行列式,实现比用numpy线性代数库中的函数numpy.linalg.det()
快约十倍的计算速度。
背景
一项目中需要频繁计算形状为(Batch,K, K)
大小矩阵的行列式,于是使用numpy线性代数库中的函数numpy.linalg.det()
, 示例如下:
b = 256**2
k = 3
A = np.random.randn(b,k,k)
npDet = np.linalg.det(A)
print("The Numpy Determinant of A is", round(sum(npDet),9))
输出:
The Numpy Determinant of A is 176.93690024
简单使用timeit
测试一下速度:
%timeit npDet = np.linalg.det(A)
输出:
10.8 ms ± 90 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
平均10ms的执行速度实在是有点浪费生命,人生苦短,不如自己造轮子。
再造一个更快的轮子:
接下来我们重写一个计算行列式的代码并使用numba.jit()
进行加速:
@numba.jit(nopython=<