具有多个元素的数组的真值是模棱两可的错误?
Posted
技术标签:
【中文标题】具有多个元素的数组的真值是模棱两可的错误?【英文标题】:The truth value of an array with more than one element is ambiguous error? 【发布时间】:2021-12-31 00:32:59 【问题描述】:我正在对数据集进行交叉验证并获得
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
在 kFCVEvaluate 的 for 循环的第二次迭代开始时出错。我做错了什么?
我查看了有关此错误的其他帖子,它们是关于使用和/或运算符,但我不使用任何逻辑运算符。
from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor(random_state = 42, max_depth=5)
def split_dataset(dataset):
numFolds=10
dataSplit = list()
dataCopy = list(dataset)
foldSize = int(len(dataset) / numFolds)
for _ in range(numFolds):
fold = list()
while len(fold) < foldSize:
index = randrange(len(dataCopy))
fold.append(dataCopy.pop(index))
dataSplit.append(fold)
return dataSplit
def kFCVEvaluate(dataset):
folds = split_dataset(data)
scores = list()
for fold in folds:
trainSet = list(folds)
trainSet.remove(fold)
trainSet = sum(trainSet, [])
testSet = list()
for row in fold:
rowCopy = list(row)
testSet.append(rowCopy)
trainLabels = [row[-1] for row in trainSet]
trainSet = [train[:-1] for train in trainSet]
model.fit(trainSet,trainLabels)
actual = [row[-1] for row in testSet]
testSet = [test[:-1] for test in testSet]
predicted = model.predict(testSet)
accuracy = actual-predicted
scores.append(accuracy)
print(scores)
kFCVEvaluate(data)
【问题讨论】:
我查看了有关此错误的其他帖子,它们是关于使用和/或运算符,但我不使用任何逻辑运算符。 回溯在哪里? 已经要求回溯,我可能不应该这样做。但如果我不得不猜测,trainSet.remove(fold)
就是问题所在。 List remove
按值选择要删除的项目(实际上是 id
优先)。因此,它遍历列表,直到找到==
测试用例的项目。但如果列表包含数组,您将进行arr1==arr2
测试,该测试将返回一个布尔数组。但是remove
只能接受一个简单的真/假。
重复谈论熊猫系列,而您的错误是数组。在任何情况下,在需要标量布尔值的 python 上下文中使用多元素布尔值的问题。 if
、and
、or
是常见的上下文。我在这里看不到任何一个(除了while)。 any/all
修复仅适用于部分案例。但首要任务是确定哪个操作有错误。实际修复会有所不同。
【参考方案1】:
测试我的remove
假设
In [214]: alist = [np.array([1,2,3]), np.ones(3), np.array([4,5])]
In [215]: alist.remove(np.array([1,2,3]))
Traceback (most recent call last):
File "<ipython-input-215-0b2a68765241>", line 1, in <module>
alist.remove(np.array([1,2,3]))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
如果列表包含列表或元组,remove
确实有效
In [216]: alist = [[1,2,3], [1,1,1], [4,5]]
In [217]: alist.remove([1,1,1])
In [218]: alist
Out[218]: [[1, 2, 3], [4, 5]]
【讨论】:
以上是关于具有多个元素的数组的真值是模棱两可的错误?的主要内容,如果未能解决你的问题,请参考以下文章
NumPy 错误:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
GridSearchCV - 错误:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
Series 的真值是模棱两可的。如何修复此错误? [复制]