импорт NumPy как NP по сравнению с NUMPY импорт - PullRequest
0 голосов
/ 01 марта 2019

У меня есть модуль, который интенсивно использует numpy:

from numpy import array, median, nan, percentile, roll, sqrt, sum, transpose, unique, where

Лучше ли сохранять чистоту пространства имен, используя

import numpy as np

, а затем, когда мне нужноиспользовать array просто использовать np.array, например?

Этот модуль также вызывается многократно, скажем, несколько миллионов раз, и поддержание чистоты пространства имен, кажется, добавляет немного издержек?

setup = '''import numpy as np'''
function = 'x = np.sum(np.array([1,2,3,4,5,6,7,8,9,10]))'
print(min(timeit.Timer(function, setup=setup).repeat(10, 300000)))

1,66632

setup = '''from numpy import arange, array, sum'''
function = 'x = sum(array([1,2,3,4,5,6,7,8,9,10]))'
print(min(timeit.Timer(function, setup=setup).repeat(10, 300000)))

1,65137

Почему это добавляетбольше времени при использовании np.sum против sum?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы могли бы иметь лучшее из обоих миров (более быстрое разрешение имен и отсутствие теней), если у вас все в порядке с определением собственного псевдонима (конечно, с учетом соглашений вашей команды):

import numpy as np
(np_sum, np_min, np_arange) = (np.sum, np.min, np.arange)

x = np_arange(24)
print (np_sum(x))

Альтернативный синтаксис для определения ваших псевдонимов:

from numpy import \
    arange as np_arange, \
    sum as np_sum, \
    min as np_min
0 голосов
/ 01 марта 2019

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

import numpy as np

. Он сделает ваш код более читабельным, когда вы увидите вызов типа np.sum (array), вам напомнят, что вы должны работать с массивом numpy.Вторая причина заключается в том, что многие из numpy функций имеют идентичные имена как функции в других модулях, таких как scipy ... Если вы используете оба, всегда ясно, какой из них вы используете.

Как вы можете видеть в тестеВы сделали, разница в производительности есть, и если вам действительно нужна производительность, вы могли бы сделать это другим способом.

Разница в производительности заключается в том, что в случае импорта конкретной функции, вы ссылаетесь на функцию вмодуль numpy в начале скрипта.В случае общего импорта модуля вы импортируете только ссылку на модуль, и python должен разрешать / находить функцию, которую вы используете в этом модуле при каждом вызове.

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