Python np.dstack:要解压缩的值太多
正在使用np.dstack进行试验,并得到错误: ValueError:要解压缩的值太多(应为2个) 代码如下:Python np.dstack:要解压缩的值太多,python,numpy,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) 解决方案?在您的情况下,深度方向的堆栈结果是 np.dstack((a,b))= array([[[1, 2], [2, 3], [3, 4]]]) 结果是一个形状
a = np.array((1,2,3))
b = np.array((2,3,4))
for x, y in np.dstack((a,b)):
print(x,",",y)
解决方案?在您的情况下,深度方向的堆栈结果是
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)
或
返回3D数组,因此需要迭代数组的第一个索引:
for x, y in np.dstack((a,b))[0]:
print(x,",",y)
您还可以使用:
你想做什么还不清楚 使用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
将两个阵列组合在新的第三轴上,生成一个三维阵列:
In [293]: np.dstack((a,b))
Out[293]:
array([[[1, 2],
[2, 3],
[3, 4]]])
In [294]: _.shape
Out[294]: (1, 3, 2)
重复这一点没有多大意义。你可能没有得到你所认为的。根据[(numpy.dstack),它返回一个嵌套数组。尝试在np.dstack…中对x迭代
,以检查您真正拥有的内容以及如何正确地迭代它。通常,当人们使用dstack
和其他串联
函数时,他们会试图使用整个数组。对它进行迭代没有多大用处。对x,y进行类似的迭代在邮政编码中(a、b):
是常见的。
In [292]: list(zip(a,b))
Out[292]: [(1, 2), (2, 3), (3, 4)]
In [293]: np.dstack((a,b))
Out[293]:
array([[[1, 2],
[2, 3],
[3, 4]]])
In [294]: _.shape
Out[294]: (1, 3, 2)