Знак () гораздо медленнее в Python, чем Matlab?
У меня есть функция в Python, которая в основном принимает знак массива (75,150), например. Я исхожу из Matlab, и время выполнения выглядит примерно так же меньше, чем эта функция. Мне интересно, если sign() работает очень медленно, и вы знаете альтернативу, чтобы сделать то же самое.
Спасибо,
1 ответ
Я не могу сказать вам, если это быстрее или медленнее, чем 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.
Сравнивая тот же код, что и с простой векторизованной операцией, и цикл 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
Таким образом, только в 4 раза быстрее. (Но потом a
здесь довольно мало.)