2016-02-20 64 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) 
相关问题