MATLAB
clear all;
clc;
a = rand(1220,1220);
tic;
for i=1:10
fprintf("%i", i)
eig(a);
end
toc;
返回结果如下:
12345678910Elapsed time is 6.629721 seconds.
Python
import numpy as np
from scipy.linalg import eig
from time import perf_counter
import sys
a = np.random.randn(1220, 1220)
tic = perf_counter()
for i in range(10):
print(i, end='\r')
np.linalg.eig(a)
toc = perf_counter()
print("Elapsed time is ", toc-tic)
返回结果如下:
Elapsed time is 93.00676925900007
Intel Python
与上面相同的程序,返回结果如下:
Elapsed time is 7.760291491999851
与 MATLAB 相近的水平。
总结
Intel 优化编译版本的 python ,在底层与 MATLAB 相似,会调用多个核。
除此以外 scipy.linalg
需要手动根据不同的矩阵选择不同的方法。比如对于实对称矩阵,
选择 eigh
会大大提升效率。而 MATLAB 则不需要手动选择。
重要的是想法,而选择什么方法,只是一种手段。