MATLAB 矩阵乘法性能比 NumPy 快 5 倍

我已经在 MATLAB 和 Python 中设置了两个相同的关于矩阵乘法和广播的测试。对于 Python,我使用了 NumPy,对于 MATLAB,我使用了使用 BLAS的mtimesx库。


MATLAB


close all; clear;


N = 1000 + 100; % a few initial runs to be trimmed off at the end


a = 100;

b = 30;

c = 40;

d = 50;

A = rand(b, c, a);

B = rand(c, d, a);

C = zeros(b, d, a);


times = zeros(1, N);

for ii = 1:N

    tic

    C = mtimesx(A,B);

    times(ii) = toc;

end


times = times(101:end) * 1e3;


plot(times);

grid on;

title(median(times));

Python


import timeit

import numpy as np

import matplotlib.pyplot as plt



N = 1000 + 100  # a few initial runs to be trimmed off at the end


a = 100

b = 30

c = 40

d = 50

A = np.arange(a * b * c).reshape([a, b, c])

B = np.arange(a * c * d).reshape([a, c, d])

C = np.empty(a * b * d).reshape([a, b, d])


times = np.empty(N)


for i in range(N):

    start = timeit.default_timer()

    C = A @ B

    times[i] = timeit.default_timer() - start


times = times[101:] * 1e3


plt.plot(times, linewidth=0.5)

plt.grid()

plt.title(np.median(times))

plt.show()

我的 Python 是pip使用 OpenBLAS安装的默认 Python 。

我在英特尔 NUC i3 上运行。

MATLAB 代码运行时间为 1 毫秒,而 Python 运行时间为 5.8 毫秒,我不知道为什么,因为它们似乎都在使用 BLAS。


杨魅力
浏览 226回答 3
3回答

弑天下

你能用最近发布的 NumPy 1.16 再试一次吗?我们重构了 matmul 以将 BLAS 用于内部二维,这应该会加快代码速度。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python