问题是您正在将一个 numpy 数组列表传递给该mode函数。它需要一个值列表,或者一个带有值的 numpy 数组(基本上任何单个容器都可以,但似乎不是数组列表)。
这是因为它必须制作某种哈希映射以确定最常见的情况,因此mode。它无法散列数组列表。
一种解决方案是简单地索引每个数组中的值(这意味着mode获取整数列表)。只需将主线更改为:
max_voting_pred = np.append(max_voting_pred, mode([a[i][0], b[i][0]]))
让我知道这是否不能解决问题。
如果您想要一些可能比修复原始代码更容易的东西,请尝试使用模块中的mode函数scipy:scipy.stats.mode。
此版本允许您传递整个数组并简单地指定一个轴来计算模式。鉴于您拥有来自两个模型的完整预测向量:
将两个数组合并为一个(200, 2)矩阵的两列
results = np.concatenate((y_pred, vgg16_y_pred), axis=1)
现在,您可以在单行上对该矩阵执行模式,但只需一次操作(无需循环):
max_votes = scipy.stats.mode(results, axis=1)
结果包含两件事。
- 每行的众数
- 该行中该模式的计数。
因此,要获得您想要的结果(与您的原始结果相匹配max_voters_pred,您必须从 中获取第一个元素max_votes:
max_voters_pred = max_votes[0]