我从以下代码中获取此异常,并且主要在while循环中形成第二行,是否有任何提示?谢谢。
def SampleLvl(self, mods, inds, M):
calcM = 0
total_time = 0
p = np.arange(1, self.last_itr.computedMoments()+1)
psums_delta = _empty_obj()
psums_fine = _empty_obj()
while calcM < M:
curM = np.minimum(M-calcM, self.params.maxM)
values, samples_time = self.fn.SampleLvl(inds=inds, M=curM)
total_time += samples_time
delta = np.sum(values * \
_expand(mods, 1, values.shape),
axis=1)
A1 = np.tile(delta, (len(p),) + (1,)*len(delta.shape) )
A2 = np.tile(values[:, 0], (len(p),) + (1,)*len(delta.shape) )
B = _expand(p, 0, A1.shape)
psums_delta += np.sum(A1**B, axis=1)
psums_fine += np.sum(A2**B, axis=1)
calcM += values.shape[0]
return calcM, psums_delta, psums_fine, total_time
我收到了这个错误
SampleLvl中的,第740行 values,samples_time = self.fn.SampleLvl(inds = inds,M = curM) ValueError:要解压缩的值太多
答案 0 :(得分:0)
在这一行:
values, samples_time = self.fn.SampleLvl(inds=inds, M=curM)
您将SampleLvl
的结果分配给2个变量,但是您似乎在该行中递归调用的函数SampleLvl
返回一个4元组。
我认为self.fn.SampleLvl
与您已经完成的功能相同。
如果是这种情况,您也在通话中省略了mods
参数。
另一个评论是,更多的上下文会很方便。我只是假设只有一个SampleLvl
,所以self==self.fn
,但实际上可能有两个不同的函数,涉及相同的名称,没有上下文,我觉得很混乱。
答案 1 :(得分:0)
当您尝试将更多变量分配给较少的变量时,您将获得ValueError: too many values to unpack
。
例如,如果您有一个返回foo()
的函数(a, b, c)
,您可以执行:a, b, c = foo()
但如果您尝试a, b = foo()
作为函数返回的变量多于您尝试分配的变量。
你在这里这样做:
values, samples_time = self.fn.SampleLvl(inds=inds, M=curM)
希望这有帮助!