我正在尝试运行一些代码(不是我的代码),在哪里使用' stack'来自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 :(得分:4)
函数numpy.stack
是新的;它appeared in numpy == 1.10.0
。如果您无法在系统上运行该版本,则可以在(接近结束)
我需要多检查一下,但该功能的工作部分是:
sl = (slice(None),) * axis + (_nx.newaxis,)
expanded_arrays = [arr[sl] for arr in arrays]
return _nx.concatenate(expanded_arrays, axis=axis)
因此它为每个数组添加了np.newaxis
,然后对其进行连接。因此,vstack
,hstack
和dstack
会调整输入的维度,然后使用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))
在轴2上创建一个大小为4的新数组。
或者:
tmp = x_t[:,:,None]
np.concatenate((tmp,tmp,tmp,tmp), axis=2)
答案 1 :(得分:2)
它可能有2个numpy库,一个在你的系统库中,另一个在你的python的站点包中,由pip维护。你有几个选择来解决这个问题。
您应该reorder sys.path
中的库,这样您的pip安装的numpy库就会出现在本地numpy库的前面。检查this out以永久修复您的路径。
同时查看virtualenv或Anaconda,这样,当您的系统上有多个版本时,您可以使用特定版本的软件包。