Guía de importación de SciPy / NumPy

Aviso: he comprobado si hay duplicado y nada responde claramente a mi pregunta. ¡Confío en que me harás saber si me perdí algo!

En un esfuerzo por limpiar mi código, he estado buscando una convención estándar para importar SciPy y NumPy en mis progtwigs. Sé que no hay una guía estricta y puedo hacerlo de la manera que quiero, pero de vez en cuando, todavía encuentro instrucciones contradictorias.

Por ejemplo, he leído en alguna parte que NumPy está destinado a implementar solo el objeto de matriz, mientras que SciPy está ahí para todos los demás algoritmos científicos. Entonces, NumPy debería usarse para la operación de matriz y SciPy para todo lo demás … Por otra parte, SciPy importa todas las funciones de Numpy en su espacio de nombres principal, de modo que scipy.array() es lo mismo que numpy.array() ( ver esta pregunta ), por lo que NumPy solo debe usarse cuando no se usa SciPy, ya que son duplicados …

¿Cuál es la forma recomendada de trabajar con SciPy y NumPy? Siendo un científico, sqrt(-1) debería devolver un número complejo, por lo que estoy inclinado a ir solo con SciPy.

En este momento, mi código comienza con:

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

Uso scipy para operaciones matemáticas (como log10() ) y numpy para la creación / operaciones de np.zeros() como np.zeros() ). ¿Estaría bien ir todo el camino con SciPy y nunca importar NumPy explícitamente? ¿Una futura actualización eliminará la manipulación de matrices de NumPy de SciPy?

Recomiendo hacer algo como

 import numpy as np import scipy as sp 

en lugar. Siempre es peligroso hacerlo from ... import * especialmente con módulos grandes como numpy y scipy . Lo siguiente ilustra por qué:

 >>> any(['foo']) True >>> from scipy import * >>> any(['foo']) Traceback (most recent call last): File "", line 1, in  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 

¿Qué pasa aquí? La función incorporada estándar de python any es reemplazada por scipy.any que tiene un comportamiento diferente. Eso podría romper cualquier código que use el estándar any .

Esta publicación tiene buena información sobre los dos módulos ( Relación entre scipy y numpy ). Parece que la funcionalidad de Numpy está destinada a ser incluida completamente en Scipy, aunque hay algunas excepciones (ver post). Diría que es seguro usar Scipy para todas sus necesidades, ya que las cosas más importantes, como las funciones matemáticas, las matrices y otras, están incluidas en Scipy.

¿Qué hay de hacer clases y usar solo lo que necesitará, fx: class one:

 import cv2 from SIGBWindows import SIGBWindows from SIGBAssg import * 

clase dos:

 import cv2 import numpy as np from pylab import * from scipy.cluster.vq import * from scipy.misc import imresize 

clase tres:

 import cv2 import numpy as np 

y finalmente donde llamamos al objeto:

 import cv2 from SIGBWindows import SIGBWindows from SIGBAssg import * windows = SIGBWindows(mode="video") windows.openVideo("somevideo.avi") kmeans(windows) 

No sé si es lo que está buscando, pero este enfoque hace que el código sea realmente limpio y fácil de agregarle más funciones.