2012-03-22 18 views
11

scipy.special paketini içe aktarma konusunda bir sorunum var. Bu zararlı değil, sadece can sıkıcı/ilginç değil.scipy.special import issue

>>> import scipy as sp 
>>> sp.special 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'special' 
>>> 

ama sonra import scipy.special yaparsam scipy.special ve sp.special yoluyla özel modül erişebilir:

>>> import scipy as sp 
>>> import scipy.special 
>>> scipy.special 
<module 'scipy.special' from 'C:\Python27\lib\site-packages\scipy\special\__init__.pyc'> 
>>> sp.special 
<module 'scipy.special' from 'C:\Python27\lib\site-packages\scipy\special\__init__.pyc'> 
>>> 

Sonra import scipy as sp ve kullanma scipy aldığınızda alıyorum sp.special erişmeyi deneyin Bu yüzden şimdi sp ve scipy ad alanlarından erişilebilen special modülüne sahibim. İlginç olan şu ki, scipy ad alanı aracılığıyla scipy'nin geri kalanına erişebiliyorum.

İlk soru: Neden special modülü ilk kez içe aktarmıyor?

İkinci soru:ad alanı tanımlamaksızın, sp ad alanı aracılığıyla special modülüne nasıl erişebilirim?

Düzenleme: Python 2.7.2 kullanarak ve varsayılan olarak 0.10.1

cevap

15

scipy, "ithal scipy" Herhangi alt paketin ithal etmemektedir. Yüklemesi yavaş olan büyük Fortran genişletme modüllerine sahip çok fazla alt paket var. import scipy veya kısaltılmış import scipy as sp yapmasını önermiyorum. Sadece çok kullanışlı değil. from scipy import special, from scipy import linalg, vb kullanın.

+0

Teşekkürler, gelecekte akılda tutulacağım. Dokümanlarda bunu açıkça belirten herhangi bir yer var mı? [API] (http://docs.scipy.org/doc/scipy-0.10.1/reference/api.html) belgesinde böyle bir yorum göremiyorum –

+1

Eski bir yorum olduğunu biliyorum, ama hala bir SSS, bu yüzden bir kaynak: http://docs.scipy.org/doc/scipy/reference/api.html#guidelines-for-importing-functions-from-scipy –