numpy'模块'对象没有属性' stack'

时间:2016-02-20 01:18:34

标签: python numpy

我正在尝试运行一些代码(不是我的代码),在哪里使用' 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。

2 个答案:

答案 0 :(得分: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))

在轴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以永久修复您的路径。

  • 同时查看virtualenvAnaconda,这样,当您的系统上有多个版本时,您可以使用特定版本的软件包。

  • 这是关于如何确保pip在您的用户路径(系统库)上安装库的另一个suggestion