2016-02-20 15 views
6

Ich versuche, etwas Code (der nicht meins ist) zu laufen, wo 'Stack' von numpy Bibliothek verwendet wird.numpy 'Modul' Objekt hat kein Attribut 'stack'

Blick in Dokumentation, Stapel wirklich existiert in numpy: https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.stack.html

aber wenn ich den Code ausführen, ich habe:

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

eine Ahnung, wie dies zu beheben. Code-Extrakt:

s_t = np.stack((x_t, x_t, x_t, x_t), axis = 2) 

brauche ich ein paar alte Bibliotheken?

Danke.

EDIT: aus irgendeinem Grund verwendet Python ältere Version von numpy Bibliothek. pip2 einfriert "numpy == 1.10.4". Ich habe auch numpy neu installiert und ich habe "numpy-1.10.4 erfolgreich installiert", aber drucke np.version.version im Code gibt mir 1.8.2.

+0

Wie geht es Ihnen? Numpy importieren – skyline75489

+0

Es ist nur vorhanden seit numpy 1.10 ... Sie verwenden wahrscheinlich eine ältere Version – donkopotamus

+0

wie gewohnt: import numpy als np –

Antwort

1

Es hat wahrscheinlich 2 Nummernbibliotheken, eine in Ihren Systembibliotheken und die andere in den Site-Paketen Ihrer Python, die von pip verwaltet wird. Sie haben ein paar Optionen, um dies zu beheben.

  • Sie sollten die Bibliotheken in sys.pathreorder so Ihre pip installiert numpy Bibliothek vor Bibliothek die native numpy kommt. Überprüfen Sie this out, um Ihren Pfad dauerhaft zu reparieren.

  • Schauen Sie auch in virtualenv oder Anaconda, mit denen Sie mit bestimmten Versionen eines Pakets arbeiten können, wenn Sie mehrere Versionen auf Ihrem System haben.

  • Hier ist ein weiterer suggestion darüber, wie sichergestellt wird, Pip installiert die Bibliothek auf Ihrem Benutzerpfad (System Library).
4

Die Funktion numpy.stack ist neu; es appeared in numpy == 1.10.0. Wenn Sie diese Version nicht auf Ihrem System läuft bekommen, kann der Code an (am Ende)

https://github.com/numpy/numpy/blob/f4cc58c80df5202a743bddd514a3485d5e4ec5a4/numpy/core/shape_base.py

Ich brauche es zu prüfen, ein bisschen mehr zu finden, aber der Arbeitsteil der Funktion ist :

sl = (slice(None),) * axis + (_nx.newaxis,) 
expanded_arrays = [arr[sl] for arr in arrays] 
return _nx.concatenate(expanded_arrays, axis=axis) 

So fügt es ein np.newaxis zu jedem Array, und dann auf dem verketten. So wie, vstack, hstack und dstack passt es die Abmessungen der Eingänge an und verwendet dann np.concatenate. Nichts besonders Neues oder Magisches.

Also, wenn x ist (2,3) Form, x[:,np.newaxis] ist (2,1,3), ist x[:,:,np.newaxis](2,3,1) usw.

Wenn x_t 2d, dann

np.stack((x_t, x_t, x_t, x_t), axis = 2) 

ist wahrscheinlich das Äquivalent von

np.dstack((x_t, x_t, x_t, x_t)) 

ein neues Array zu schaffen, die Größe 4 auf Achse 2.

Oder:

tmp = x_t[:,:,None] 
np.concatenate((tmp,tmp,tmp,tmp), axis=2) 
Verwandte Themen