使用np.dstack时遇ValueError: too many values to unpack (expected 2)求解决
解决np.dstack遍历时报错
ValueError: too many values to unpack (expected 2)的问题 嘿,我来帮你排查这个报错问题~首先咱们得搞明白为什么会出这个错:
当你用np.dstack((a,b))处理两个一维数组时,它会把它们堆叠成三维数组,最终形状是(1, 3, 2)。你之后用for x, y in np.dstack((a,b))遍历的时候,每次循环拿到的其实是一个形状为(3,2)的二维数组,这显然没法拆成两个变量x和y,所以就抛出了“值太多无法解包”的错误。
下面给你几个可行的解决办法:
方法1:改用np.column_stack(推荐)
np.column_stack会把一维数组直接堆叠成二维的列数组,形状是(3,2),这样遍历的时候就能直接解包成x和y了:
import numpy as np a = np.array((1,2,3)) b = np.array((2,3,4)) for x, y in np.column_stack((a,b)): print(x, ",", y)
输出结果:
1 , 2 2 , 3 3 , 4
方法2:调整np.dstack的结果形状
如果你一定要用np.dstack,可以把它的结果转置并压缩掉长度为1的维度,转换成二维数组后再遍历:
import numpy as np a = np.array((1,2,3)) b = np.array((2,3,4)) # 转置后变成(3,1,2),squeeze去掉长度为1的维度,得到(3,2)的二维数组 stacked = np.dstack((a,b)).transpose(1,0,2).squeeze() for x, y in stacked: print(x, ",", y)
方法3:直接用Python原生的zip
如果只是想配对遍历两个数组,其实不用numpy的堆叠函数,直接用zip更简单直观:
import numpy as np a = np.array((1,2,3)) b = np.array((2,3,4)) for x, y in zip(a, b): print(x, ",", y)
这样就能完美解决你的问题啦~
内容的提问来源于stack exchange,提问作者random_x_y_z
相关产品推荐
相关产品推荐

