2016-02-20 67 views
6

我想運行一些代碼(這不是我的),其中使用'numpy庫'的堆棧。numpy'模塊'對象沒有屬性'堆棧'

展望文件,堆真的存在numpy的: https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.stack.html

但是當我運行的代碼,我得到:

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

任何想法如何解決這個問題。 代碼提取:

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

我需要一些舊庫嗎?

謝謝。

編輯: 由於某些原因,python使用舊版本的numpy庫。 pip2凍結打印「numpy == 1.10.4」。我也重新安裝了numpy,我已經「成功安裝了numpy-1.10.4」,但是在代碼中打印np.version.version給了我1.8.2。

+0

你好嗎進口numpy? – skyline75489

+0

它只是自numpy 1.10以來的禮物...您可能像往常一樣使用舊版本 – donkopotamus

+0

:導入numpy爲np –

回答

1

它可能有2個numpy庫,一個在你的系統庫中,另一個在你的python站點包中由pip維護。你有幾個選擇來解決這個問題。

  • 你應該reordersys.path庫讓你的點子安裝numpy的庫附帶前面的本地numpy的庫。檢查this out永久修復您的路徑。

  • 另請參閱virtualenvAnaconda,這將允許您在系統上有多個版本時使用特定版本的軟件包。

  • 下面是另一個suggestion關於如何確保pip在您的用戶路徑(系統庫)上安裝庫。
4

函數numpy.stack是新的;它appeared in numpy == 1.10.0。如果你不能得到那個版本的系統上運行的代碼可以在(接近尾聲)

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

我需要檢查它更多的被發現,但功能的工作部分是:

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

因此,它爲每個數組添加一個np.newaxis,然後將其連接在一起。像vstackhstackdstack它調整輸入的尺寸,然後使用np.concatenate。沒有什麼特別新的或神奇的。

所以如果x(2,3)形狀,x[:,np.newaxis](2,1,3)x[:,:,np.newaxis](2,3,1)

如果x_t爲2d,然後

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

大概是

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

創建具有大小4上軸2

或者一個新的數組的當量:

tmp = x_t[:,:,None] 
np.concatenate((tmp,tmp,tmp,tmp), axis=2) 
相關問題