2016-06-02 3 views
4

Scipy의 일부 모듈은 실제로 라이브러리의 일부가 아니라 Numpy의 모듈을 호출한다는 사실에 혼란스러워합니다. 모든실제로 Scipy 모듈은 Numpy 모듈에 어떤 호출을합니까?

한 예는 linalg입니다 :

import scipy 
scipy.linalg 

이 오른쪽 Scipy에서 호출하는 방법

from scipy import linalg 
scipy.linalg 

이다 플립 측면에서

AttributeError: 'module' object has no attribute 'linalg'

을주는해야 손잡이가 되라.

numpy.linalg 

어떻게 작동합니까? 그리고 기술적으로 Numpy와 Scipy를 구별하는 것은 무엇입니까?

+2

['scipy/__ init __. py'] (https://github.com/scipy/scipy/blob/master/scipy/__init__.py)를보십시오 - 가져 오기 마법의 일부는 [문서화되어 있습니다 ] (https://github.com/scipy/scipy/blob/master/scipy/__init__.py#L15-L16), 실제로는 'linalg'과 관련하여 특정 마법이있는 것으로 보입니다 (https : // github.com/scipy/scipy/blob/master/scipy/__init__.py#L78-L82). –

+0

@ LukasGraf 감사합니다! 따라서 필요한 명시 적 가져 오기는 Numpy 이름과 충돌하기 때문입니다. –

+0

@martina : 아니요. 충돌하지 않는 파일도 명시 적으로 가져와야합니다. – user2357112

답변

3

the right way to call it from Scipy is

from scipy import linalg 
scipy.linalg 

which must be a handle for

numpy.linalg 

아니요! 그들은 완전히 다른 모듈입니다. 또한 import scipy.linalg이거나 scipy.linalg 또는 from scipy import linalg을 사용하고 linalg을 사용하십시오.

당신이 SciPy 모듈 NumPy와에서 실제로 여부를 알하려는 경우 가장 쉬운 방법은 대화식으로 보는 것입니다 :

In [9]: scipy.random 
Out[9]: <module 'numpy.random' from '/usr/local/lib/python2.7/dist-packages/numpy/random/__init__.pyc'> 

In [10]: scipy.linalg 
Out[10]: <module 'scipy.linalg' from '/usr/local/lib/python2.7/dist-packages/scipy/linalg/__init__.pyc'> 

당신이 볼 수 있듯이, numpy에서 하나의 출력에 numpy을 말한다 . 이것은 IPython 세션이지만 일반적인 Python 대화식 세션은 비슷한 것을 말합니다.

+0

그들은 어떻게 다른가요? 또한, 왜 내 첫 번째 코드 줄이 그 오류를 반환합니까? 일반적으로 전체 라이브러리를 가져 오는 경우 해당 모듈에 액세스합니다. –

+1

@martina : 목록에 표시하는 방법이 너무 다릅니다. 또한, 당신이하는 일은 패키지의 서브 모듈에 접근하는 일반적인 방법이 아닙니다. 항상 서브 모듈을 명시 적으로 가져와야합니다. NumPy는 편의를 위해 자동으로 대부분의 자체 서브 모듈을 가져옵니다. 더 많은 질문이 있으면 의견을 묻는 대신 새로운 질문을 게시하십시오. – user2357112