Вычисления собственных значений Python выполняются намного медленнее, чем вычисления MATLAB на моем компьютере. Зачем? - PullRequest
12 голосов
/ 19 мая 2011

Я хотел бы вычислить собственные значения матриц большого размера (около 1000x1000), используя Python 2.6.5.Я не смог сделать это быстро.Я не нашел других потоков, посвященных этому вопросу.

Когда я запускаю

a = rand(1000,1000);
tic;
for i =1:10
    eig(a);
end
toc;

в MATLAB, это занимает около 30 секунд.Подобный тест в Python требует 216 секунд.Выполнение его через R с использованием RPy не значительно ускорило вычисления.Тест в Октаве занял 93 секунды.Я немного озадачен разницей в скорости.

Единственный пример такого вопроса, который я могу найти в Интернете, это this , которому несколько лет.Постер в этом вопросе имеет другую структуру каталогов Python (которую я приписываю возрасту поста, хотя могу ошибаться), поэтому я не был достаточно уверен в том, чтобы пытаться следовать инструкциям, опубликованным корреспондентом.

Мой менеджер пакетов говорит, что у меня установлен LAPACK, и я использую NumPy и SciPy для вычислений Python:

from numpy import *
from scipy import *
from numpy.linalg import *
import time

a = randn(1000,1000)
tic = time.clock()
for i in range(0,10):
    eig(a)
toc = time.clock()
print "Elapsed time is ", toc-tic

Я довольно плохо знаком с Python, поэтому, возможно, сделал что-то глупое.Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.

Ответы [ 2 ]

14 голосов
/ 19 мая 2011

Я думаю, что вы видите разницу между библиотекой Intel Math Kernel Library (MKL), которая используется Matlab, и любой реализацией LAPACK, которую вы используете в своей системе (ATLAS, может быть?), С которой связан scipy. Вы можете увидеть, насколько быстрее MKL в этих тестах .

Я полагаю, что вы бы получили гораздо лучшую производительность, если бы могли перестраивать Scipy на основе библиотек Intel MKL. Если вы используете Windows, предварительно созданные копии можно загрузить с здесь или вы можете использовать что-то вроде дистрибутива Enthought Python.

3 голосов
/ 19 мая 2011

Я чувствую разницу во времени, но не так радикально, как ваша.Мое время MATLAB (R2010b) составило ~ 25 секунд, а время python (2.7) составило ~ 60 секунд.

Я не очень удивлен этими числами, поскольку MATLAB является исключительно языком числовых и матричных манипуляций, и его преимущество заключается в его ускорителе JIT перед python, который является языком общего назначения,Как правило, различия между MATLAB и python+numpy довольно малы, но становятся очевидными, когда размер матрицы велик, как в вашем случае.

Это не значит, что нет способов улучшить производительность Python.Статья PerformancePython на сайте scipy дает хорошее представление о различных способах улучшения производительности python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...