Python numpy.square vs **

Есть ли разница между numpy.square и использованием оператора ** в массиве Numpy?

Из того, что я вижу, он дает тот же результат.

Любые различия в эффективности выполнения?

Пример пояснения:

In [1]: import numpy as np

In [2]: A = np.array([[2, 2],[2, 2]])

In [3]: np.square(A)
Out[3]: 
array([[4, 4],
       [4, 4]])

In [4]: A ** 2
Out[4]: 
array([[4, 4],
       [4, 4]])

Ответ 1

Вы можете проверить время выполнения, чтобы получить четкое представление об этом

In [2]: import numpy as np
In [3]: A = np.array([[2, 2],[2, 2]])
In [7]: %timeit np.square(A)
1000000 loops, best of 3: 923 ns per loop
In [8]: %timeit A ** 2
1000000 loops, best of 3: 668 ns per loop

Ответ 2

Для большинства приборов обе дают одинаковые результаты. Как правило, стандартный pythonic a * a или ** 2 быстрее, чем numpy.square() или numpy.pow(), но функции numpy часто более гибкие и точные. Если вы выполняете вычисления, которые должны быть очень точными, придерживайтесь numpy и, возможно, даже используйте другие типы данных (float96).

Для нормального использования ** 2 сделает хорошую работу и ускорит работу, чем numpy. Ребята в Этот поток привел несколько хороших примеров для подобных вопросов.