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)