Python np.dstack:解包

时间:2018-05-14 22:42:00

标签: python numpy

正在尝试使用np.dstack并收到错误:

  

ValueError:解压缩的值太多(预期2)

以下是代码:

a = np.array((1,2,3))
b = np.array((2,3,4))
for x, y in np.dstack((a,b)):
    print(x,",",y)

解决方案?

3 个答案:

答案 0 :(得分:1)

在您的情况下,深度方式堆栈结果为

np.dstack((a,b))=
array([[[1, 2],
        [2, 3],
        [3, 4]]])

结果是一个形状数组(1,3,2)。因此,当您遍历此数组时,您将长度为3的对象分配给长度为2的元组,因此您得到了ValueError。

取决于你想要的,你可以

for x, y in np.dstack((a,b))[0]:
    print(x,",",y)

for x, y, z in np.dstack((a,b)):
    print(x,",",y)

答案 1 :(得分:0)

dstack返回一个3D数组,所以你需要迭代数组的第一个索引:

for x, y in np.dstack((a,b))[0]:
    print(x,",",y)

您也可以使用stack

for x, y in np.stack((a,b), axis=1):
    print(x,",",y)

答案 2 :(得分:0)

目前尚不清楚你想做什么。

使用2个这样的数组的逻辑迭代是:

In [290]: a = np.array((1,2,3))
     ...: b = np.array((2,3,4))
     ...: 
     ...: 
In [291]: for x,y in zip(a,b):print(x,y)
1 2
2 3
3 4

或者只是使用'转置'的列表zip方法:

In [292]: list(zip(a,b))
Out[292]: [(1, 2), (2, 3), (3, 4)]

dstack在新的第3轴上组合了2个数组,产生了一个3d数组:

In [293]: np.dstack((a,b))
Out[293]: 
array([[[1, 2],
        [2, 3],
        [3, 4]]])
In [294]: _.shape
Out[294]: (1, 3, 2)

对此进行迭代并没有多大意义。