Numpy/Python 在性能上与 Matlab 相差甚远
在本文中,我们将介绍 Numpy/Python 对比 Matlab 的部分性能差异。简单来说,Python 虽然在数据处理领域中有广泛的应用,但是在处理科学计算领域的数据时,其性能表现不如 Matlab。下面是两端代码的简单示例:
Python/Numpy:
import numpy as np
a = np.random.rand(1000, 1000)
b = np.random.rand(1000, 1000)
c = np.dot(a, b)
Matlab:
a = rand(1000, 1000);
b = rand(1000, 1000);
c = a * b;
在这个计算矩阵乘法的例子中,Matlab 消耗时间约为 Python 的 1/10。
阅读更多:Numpy 教程
原因分析
Python 语言的缺失是代码无法进行动态编译,导致运行速度较慢。相较于 Python,Matlab 可以利用 Just-In-Time 编译器(即 JIT 编译器)对代码进行编译,提高代码的运行速度。此外,在复杂的计算过程中,Matlab 也更準确地计算。
另外,Matlab 的默认线性代数库是 Intel-MKL 库,该库较为高效。而 Python 运行时不只有一个线性代数库可用,这意味着,不同的库特性也不同,对应的性能表现也不同。例如,使用 Scipy 库运行上述代码,由于其线性代数库使用的是 OpenBLAS 库,收到性能差异的影响。如果使用 Intel-MKL 库, Python 可以获得与 Matlab 相近甚至更高的性能表现。
解决办法
在针对大矩阵计算时,我们强烈建议使用 Matlab,尤其在数据处理与计算上,Matlab 对于科学研究具有较高的价值。但对于小规模矩阵计算或更常规的数据操作,Python/Numpy 仍然是一种被广泛认可并被使用的编程平台。
当然,对于有需要使用 Python 进行科学计算的用户,需要额外安装性能较好的线性代数库。以下是一种例子:
pip install mkl
该库需要与 Numpy 一起使用,并且可以充分利用 Intel-MKL 库提供的运行效率。使用 MKL 库后,这些代码的运行时间将显著缩短。
总结
本文简单介绍了 Python/Numpy 在处理科学计算领域的性能不如 Matlab 的原因,以及解决方法。尽管 Python/Numpy 的处理速度较慢,但其在数据处理与常规数据操纵上的表现是优秀的,还有丰富的第三方库可以供使用。在针对不同目的的数据计算和处理中,选对合适的编程平台非常重要。