Я не могу сказать вам, если это быстрее или медленнее, чем Matlab, так как я понятия не имею, какие номера вы видите там (вы не представили количественных данных на всех). Однако, насколько альтернативы идут:
import numpy as np
a = np.random.randn(75, 150)
aSign = np.sign(a)
Тестирование с использованием %timeit
в IPython
:
In [15]: %timeit np.sign(a)
10000 loops, best of 3: 180 µs per loop
Поскольку цикл по массиву (и то, что происходит внутри него) реализуется в оптимизированном коде C, а не общий Python, он имеет тенденцию быть примерно на порядок быстрее - на том же стадионе, что и Matlab.
Сравнивая тот же код, как Numpy векторизованных операций против цикла Python:
In [276]: %timeit [np.sign(x) for x in a]
1000 loops, best of 3: 276 us per loop
In [277]: %timeit np.sign(a)
10000 loops, best of 3: 63.1 us per loop
Так, только 4x, как быстро здесь. (Но тогда a
здесь довольно маленький.)
Joseph Dunn, вы правы, я забыл много важных вещей: данные сложного массива, но затем я использую знак (real (x)) и знак (imag (y)) – tete
Коэффициент 10 при выполнении скорости является нормальным между MATLAB и python, поскольку MATLAB имеет JIT (компилятор Just-In-Time). Использование pypy вместо CPython * может * улучшить производительность python рядом с MATLAB. – Bakuriu
Добавление к тому, что сказал Бакуриу: код Python с использованием numpy имеет тенденцию находиться на той же скорости, что и MATLAB, если вы можете писать вещи с точки зрения встроенных векторизованных функций, но на порядок медленнее всякий раз, когда вам приходится писать явный цикл. К сожалению, некоторые вещи трудно выразить с точки зрения векторных функций ... но некоторые вещи на самом деле проще, так, как показывает ответ Джозефа Данна. – abarnert