我有以下代码:
scores = [confusion_matrix[idx][idx] / sum(confusion_matrix[idx]) for (idx, scores) in enumerate(confusion_matrix)]
我的问题是sum(confusion_matrix [idx])在某些情况下可能为0,导致ZeroDivisionError
。但是因为confusion_matrix[idx][idx]
在这种情况下也是0,所以我解决了这个问题:
scores = [divide(confusion_matrix[idx][idx], sum(confusion_matrix[idx])) for (idx, scores) in enumerate(confusion_matrix)]
如果divide(x,y)
,则y==0
函数返回1,如果(x/y)
则返回y>0
。但我想知道是否有更简单的方法。也许我可以使用一些三元运算符,但它存在于Python中吗?
答案 0 :(得分:5)
是的,在python中它被称为conditional expression:
[confusion_matrix[idx][idx] / sum(confusion_matrix[idx]) if sum(confusion_matrix[idx]) != 0 else 0 for (idx, scores) in enumerate(confusion_matrix)]
答案 1 :(得分:2)
[(lambda x, y: 0 if y == 0 else x/y)(row[i], sum(row))
for i, row in enumerate(confusion_matrix)]
答案 2 :(得分:1)
确实存在三元条件:
'blah' if True else 'wee'
编辑:我很蠢。