【问题标题】:List Comprehension with Assignment Operation带赋值操作的列表理解
【发布时间】:2021-09-06 04:52:43
【问题描述】:

我的代码没有错误。但我有点想知道。有没有办法使用列表理解来编写我的代码?我想删除外循环(for i in range(labels))并用列表理解编写它。实际上,我面临着如何在内部和外部循环之间进行分配(current_class_p = p[y == i])的问题。

例如,y = np.array([0, 1, 1, 0, 1])p =np.array([1, 0, 1, 0, 1]) 和此 [[1, 1],[1, 2]] 的混淆矩阵。

def confusion_matrix_version2(y, p):
  labels = len(np.unique(y)) 
  result = np.zeros((labels, labels), dtype=int)

  for i in range(labels):
    current_class_p = p[y == i]
    result[i] = [len(current_class_p[current_class_p == j]) for j in range(labels)]
  return result

【问题讨论】:

  • 请将此脚本设为工作脚本。为 y 和 p 创建简单的值,并让您的示例使用这些值调用函数。这似乎与 numpy 相关,并且 numpy 数组与 python 列表完全不同。通过使其成为一个运行脚本,我们可以了解变量的类型,并可以编写答案来演示解决方案。
  • 所以你想制作一个混淆矩阵,我假设是y = true valuesp = predicted_values,对吧?它必须是列表理解,还是您愿意拥有一个数组?
  • 我编辑了我的问题。 @罗伯特链接
  • @MD.ABUSAYED 说,我的回复为您的输入提供了您想要的输出。如果这对您有用,请将其标记为已接受的答案。如果没有,请告诉我是否还有其他可以做的事情
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: python list list-comprehension


【解决方案1】:

使用sklearnconfusion_matrix 生成您想要的输出:

>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> cm = confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

其中行对应于预测值,列对应于实际值。如果你想把它作为一个嵌套列表,你可以使用cm.tolist()

>>> cm.tolist()
[[2, 0, 0], [0, 0, 1], [1, 0, 2]]

编辑:根据 juanpa.arrivillaga 的建议,将列表推导中的列表输出更新为数组的 tolist 函数。

【讨论】:

  • 你应该改用cm.tolist()
  • 你是对的。我的印象是在调用list(array) 时调用了tolist,但它只是使所有内容都成为嵌套列表。感谢您的建议!现在干净多了
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2020-12-12
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多