Numpy/Python 在性能上与 Matlab 相差甚远

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 的处理速度较慢,但其在数据处理与常规数据操纵上的表现是优秀的,还有丰富的第三方库可以供使用。在针对不同目的的数据计算和处理中,选对合适的编程平台非常重要。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程