2016-02-20 33 views
6

Próbuję uruchomić kod (który nie jest mój), gdzie jest używany "stos" z biblioteki numpy.numpy "moduł" obiekt nie ma atrybutu "stos"

Patrząc w dokumentacji, stos naprawdę istnieje w numpy: https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.stack.html

ale kiedy uruchomić kod, mam:

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

jakiś pomysł jak rozwiązać ten problem. kod ekstrakt:

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

Czy potrzebuję starych bibliotek?

Dzięki.

EDYCJA: z jakiegoś powodu, python używa starszej wersji biblioteki numpy. odbitki pip2 "numpy == 1.10.4". Ponownie zainstalowałem numpy i mam "Pomyślnie zainstalowałem numpy-1.10.4", ale wydrukowanie np.version.version w kodzie daje mi 1.8.2.

+0

Jak to zrobić importować numpy? – skyline75489

+0

Jest obecny tylko od numpy 1.10 ... prawdopodobnie używasz starszej wersji – donkopotamus

+0

jak zwykle: import numpy jako np. –

Odpowiedz

1

Jest prawdopodobne, że posiada 2 biblioteki numpy, jedną w twoich bibliotekach Systemu, a drugą w pakietach witryn Pythona obsługiwaną przez pip. Masz kilka opcji, aby to naprawić.

  • Należy reorder bibliotek w sys.path więc pip numpy zainstalowane biblioteki przychodzi przed rodzimy numpy biblioteka. Sprawdź this out, aby trwale naprawić ścieżkę.

  • Zobacz także virtualenv lub Anaconda, które pozwolą Ci pracować z konkretnymi wersjami pakietu, gdy masz wiele wersji w systemie.

  • Oto kolejna suggestion o tym, jak zapewnić, aby pip instalował bibliotekę na ścieżce użytkownika (Biblioteka systemowa).
4

Funkcja numpy.stack jest nowa; to appeared in numpy == 1.10.0. Jeśli nie można uzyskać tę wersję uruchomionego na komputerze, kod można znaleźć na stronie (pod koniec)

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

muszę zbadać go nieco więcej, ale część pracy funkcji jest :

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

Dodaje więc np.newaxis do każdej tablicy, a następnie konkatenować na tym. Tak jak, vstack, hstack i dstack dostosowuje wymiary wejść, a następnie używa np.concatenate. Nic szczególnie nowego lub magicznego.

Więc jeśli x jest (2,3) kształt, x[:,np.newaxis] jest (2,1,3), x[:,:,np.newaxis] jest (2,3,1) etc.

Jeśli x_t jest 2d, następnie

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

prawdopodobnie odpowiednik

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

tworząc nową tablicę, która ma rozmiar 4 na osi 2.

, czyli

tmp = x_t[:,:,None] 
np.concatenate((tmp,tmp,tmp,tmp), axis=2) 
Powiązane problemy