具有多个元素的数组的真值是模棱两可的错误?

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 上下文中使用多元素布尔值的问题。 ifandor 是常见的上下文。我在这里看不到任何一个(除了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 的真值是模棱两可的。如何修复此错误? [复制]

scipy.optimize.curve_fit ValueError:具有多个元素的数组的真值不明确

石榴 HMM 标签:具有多个元素的数组的真值是不明确的。

ValueError:一个系列的真值在一个热编码错误中不明确