Python ';ValueError:数组的真值..';仅在函数中定义列表理解时显示

Python ';ValueError:数组的真值..';仅在函数中定义列表理解时显示,python,Python,我很抱歉,如果这是一个简单的问题,我只是无法理解为什么我一直得到错误 ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 我想获取一个数组并将其分解为一个元组列表,其中元组的一个元素是索引,另一个是值。我的代码如下 tuples = [] for index, value in np.ndenumerate(array_): t

我很抱歉,如果这是一个简单的问题,我只是无法理解为什么我一直得到错误

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我想获取一个数组并将其分解为一个元组列表,其中元组的一个元素是索引,另一个是值。我的代码如下

tuples = []

for index, value in np.ndenumerate(array_):

    tuples.append((index, value)) # Decompose into list of tuples
一旦我有了这个列表,我想创建另一个列表,只包含那些模平方小于给定值t的元组。所以,我用了一个列表

M = [item for item in tuples if abs(item[1])**2 < t]

查看发生了什么。

tmp\u t
是一个两元素数组。(您可以通过手动执行对
iteration
的第一次调用,一次执行一行代码)再次调用
iteration
时,
t
不再是浮点;您将一个数字(
abs(…)
)与一个数组进行比较,这会引发原始错误


就我所了解的程序逻辑而言,您应该将
tmp\u var=np.var(tmp\u数据)
更改为
tmp\u var=np.var(tmp\u数据)[1]

在哪一行发生
ValueError
?如果它在
If condition
行上,那么条件是什么?@LarsH它在tmp_数据/列表理解行上运行。我不确定为什么我在信息中添加了关于它是递归的,因为这不是错误所在。我现在就编辑这篇文章。什么是
tmp\u t
?如何定义它?@DYZ tmp_t是列表理解后生成的变量(列表理解是引发ValueError的地方)。我现在删除了有关它的信息,因为我的实际问题不需要它。很抱歉造成混淆。是的,但它是如何生成的?它的数据类型是什么?(它被传递到下一个调用
迭代
,因此它的值很重要。)你完全正确,当我将工作代码的格式更改为现在的格式时,我忽略了一个事实,即我的列表现在是元组。谢谢你的帮助。
def iteration(t, N, data):

    ...

    tmp_data = [item for item in data if abs(item[1])**2 < t]

    ...

    return tmp_data
# Initialisation for array

N        = len(array_[0])*len(array_[1])
var      = np.var(array_)
t        = np.sqrt(2*var*np.log(N))

Z = []

for index, value in np.ndenumerate(array_):

    Z.append((index, value))

# Main loop

def iteration(t, N, data):

    tmp_noise = N # Save old N 

    tmp_data = [item for item in data if abs(item[1])**2 < t]
    tmp_N    = len(tmp_data)

    tmp_var = np.var(tmp_data)
    tmp_t   = np.sqrt(2*tmp_var*np.log(tmp_N))

    if tmp_noise != tmp_N:

        return iteration(tmp_t, tmp_N, tmp_data)

    return tmp_data
array_ = np.random.rand(10,10)