Руководство по импорту SciPy/NumPy

обратите внимание: я проверил дубликат и ничего четко не отвечает на мой вопрос. Надеюсь, вы дадите мне знать, если я что-то упущу!

в попытке очистить мой код, я искал стандартное соглашение для импорта SciPy и NumPy в моих программах. Я знаю, что нет строгих правил, и я могу делать это так, как хочу, но время от времени я все еще нахожу противоречивые инструкции.

например, я где-то читал, что NumPy предназначен только для реализации объект массива, в то время как SciPy существует для всех других научных алгоритмов. Поэтому NumPy следует использовать для работы с массивом и SciPy для всего остального... С другой стороны, SciPy импортирует все функции Numpy в свое основное пространство имен, так что scipy.array() это то же самое как numpy.array() (посмотреть здесь), поэтому NumPy следует использовать только тогда, когда SciPy не используется, поскольку они являются дубликатами...

каков рекомендуемый способ работы с SciPy и NumPy? Будучи ученый, sqrt(-1) должен возвращать комплексное число, поэтому я склонен идти только с SciPy.

прямо сейчас, мой код начинается с:

import numpy as np
from scipy import *
from matplotlib import pyplot as plt

Я использую scipy для математической операции (например,log10()) и numpy для создания/операций массива (например,np.zeros()). Было бы хорошо пройти весь путь с SciPy и никогда не импортировать NumPy явно? Будет ли будущее обновление удалять манипуляции массива NumPy из SciPy?

3 ответов


я рекомендую сделать что-то вроде

import numpy as np
import scipy as sp
. Это всегда опасно делать from ... import * особенно с большими модулями, такими как numpy и scipy. Ниже показано, почему:
>>> any(['foo'])
True
>>> from scipy import *
>>> any(['foo'])

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
     any(['foo'])
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 1575, in any
    return _wrapit(a, 'any', axis, out)
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 37, in _wrapit
    result = getattr(asarray(obj),method)(*args, **kwds)
TypeError: cannot perform reduce with flexible type

что здесь происходит? Стандартная встроенная функция python any заменить на scipy.any, который имеет различное поведение. Это может нарушить любой код, который использует standard any.


этот пост имеет хорошую информацию о двух модулях (отношения между scipy и numpy). Кажется, что функциональность Numpy должна быть полностью включена в Scipy, хотя есть несколько исключений (см. сообщение). Я бы сказал, что безопасно просто использовать Scipy для всех ваших потребностей, поскольку самые важные вещи, такие как математические функции, массивы и другие вещи, включены в Scipy.


как насчет создания классов и использования только того, что вам нужно, fx: первый класс:

import cv2
from SIGBWindows import SIGBWindows
from SIGBAssg import *

два класса:

import cv2
import numpy as np

from pylab import *
from scipy.cluster.vq import *
from scipy.misc import imresize

три класса:

import cv2
import numpy as np

и, наконец, где мы называем объекта:

import cv2
from SIGBWindows import SIGBWindows
from SIGBAssg import *

windows = SIGBWindows(mode="video")
windows.openVideo("somevideo.avi")
kmeans(windows)

Я не знаю, если это то, что вы ищете, но этот подход делает код очень чистый и легко добавлять новые функции к нему.