Numpy / Python выступают против Matlab - PullRequest
4 голосов
/ 03 апреля 2012

У меня есть простой код умножения матриц в Python (numpy)

import numpy as np
import time
a = np.random.random((70000,3000));
b = np.random.random((3000,100));
t1=time.time()
c = np.dot(a,b);
t2=time.time()
print 'Time passed is %2.2f seconds' %(t2-t1

Требуется около 16 секунд для завершения умножения ( c = np.dot (a, b); ) на одном ядре. Однако, когда я выполняю такое же умножение на Matab, для завершения умножения требуется примерно 1 секунда (6 ядер).

Итак, почему Matlab в 2,6 раза быстрее, чем numpy для умножения матриц? (Производительность на ядро ​​важна для меня)

ОБНОВЛЕНИЕ На этот раз я попробовал то же самое, используя Eigen. И его производительность немного лучше, чем у Matlab. Eigen использует ту же реализацию Blas, что и Numpy. Так что реализация Blas и не станет источником недостатка в производительности.

Чтобы убедиться, что установленный numpy использует BLAS, я np.show_config ()

enter code here
blas_info:
   libraries = ['blas']
   library_dirs = ['/usr/lib64']
   language = f77
lapack_info:
   libraries = ['lapack']
   library_dirs = ['/usr/lib64']
   language = f77

atlas_threads_info:
   NOT AVAILABLE

blas_opt_info:
   libraries = ['blas']
   library_dirs = ['/usr/lib64']
   language = f77
   define_macros = [('NO_ATLAS_INFO', 1)]

atlas_blas_threads_info:
   NOT AVAILABLE

lapack_opt_info:
   libraries = ['lapack', 'blas']
   library_dirs = ['/usr/lib64']
   language = f77
   define_macros = [('NO_ATLAS_INFO', 1)]

atlas_info:
   NOT AVAILABLE

lapack_mkl_info:
   NOT AVAILABLE

blas_mkl_info:
   NOT AVAILABLE

atlas_blas_info:
   NOT AVAILABLE

mkl_info:
   NOT AVAILABLE

1 Ответ

6 голосов
/ 03 апреля 2012

Попробуйте Enthought Python Distribution .Например, она связана с Intel Math Kernel Library , которая высоко оптимизирована и используется MatLab.

Редактирование: обновление для 2017 года. Anaconda действительнопуть в эти дни.

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