2016-06-02 7 views
4

Ich bin verwirrt durch die Tatsache, dass einige Module in Scipy sind eigentlich nicht Teil der Bibliothek, sondern sind eher Aufrufe an Module in Numpy.Welche Scipy-Module werden eigentlich zu Numpy-Modulen aufgerufen?

Ein Beispiel für alle ist linalg:

import scipy 
scipy.linalg 

das gibt

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

auf der anderen Seite, der richtige Weg, es von Scipy zu nennen, ist

from scipy import linalg 
scipy.linalg 

das muss ein Griff sein für

numpy.linalg 

Wie funktioniert das? Und was unterscheidet Numpy und Scipy dann?

+2

Werfen Sie einen Blick auf ['scipy/__ init __. Py'] (https://github.com/scipy/scipy/blob/master/scipy/__init__.py) - einige der Import-Magie ist es [dokumentiert da] (https://github.com/scipy/scipy/blob/master/scipy/__init__.py#L15-L16), und es scheint tatsächlich [einige besondere Magie in Bezug auf 'linalg'] zu geben (https: // github.com/scipy/scipy/blob/master/scipy/__init__.py#L78-L82). –

+0

@LukasGraf Vielen Dank! Also ist der erforderliche explizite Import wegen Namenskonflikt mit den Numpy-Einsen? –

+0

@martina: Nein, Sie müssen diejenigen, die nicht in Konflikt stehen, explizit importieren. – user2357112

Antwort

3

the right way to call it from Scipy is

from scipy import linalg 
scipy.linalg 

which must be a handle for

numpy.linalg 

Nein! Sie sind völlig verschiedene Module. Auch wäre es entweder import scipy.linalg und dann scipy.linalg oder from scipy import linalg verwenden und dann linalg verwenden.

Wenn Sie, ob ein SciPy Modul erzählen will eigentlich aus NumPy ist, ist der einfachste Weg, um nur interaktiv es betrachtet:

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'> 

Wie Sie sehen können, die man von numpy sagt numpy in der Ausgabe . Dies ist eine IPython-Sitzung, aber eine normale interaktive Python-Sitzung sagt etwas ähnliches.

+0

Wo sind sie anders? Warum geben meine ersten Codezeilen diesen Fehler zurück? Wenn Sie die vollständige Bibliothek importieren, greifen Sie normalerweise auf die Module zu. –

+1

@Martina: Sie unterscheiden sich in viel zu viele Arten zu listen. Außerdem ist die Art, wie Sie Dinge gemacht haben, * nicht * der normale Weg, um auf Submodule eines Pakets zuzugreifen. Sie sollten Submodule immer explizit importieren. NumPy importiert einfach die meisten seiner eigenen Submodule aus praktischen Gründen. Wenn Sie weitere Fragen haben, schreiben Sie eine neue Frage, anstatt sie in den Kommentaren zu stellen. – user2357112

Verwandte Themen