为了账号安全,请及时绑定邮箱和手机立即绑定

如何按元素比较 3 个 numpy 数组并将结果作为具有最大值的数组?

如何按元素比较 3 个 numpy 数组并将结果作为具有最大值的数组?

阿晨1998 2021-11-30 15:45:45
numpy 数组包含如下所示的预测概率:predict_prob1 =([[0.95602106, 0.04397894],                 [0.93332366, 0.06667634],                 [0.97311459, 0.02688541],                 [0.97323962, 0.02676038]])predict_prob2 =([[0.70425144, 0.29574856],                 [0.69751251, 0.30248749],                 [0.7072872 , 0.2927128 ],                 [0.68683139, 0.31316861]])predict_prob3 =([[0.56551921, 0.43448079],                 [0.93321106, 0.06678894],                 [0.92345399, 0.07654601],                 [0.88396842, 0.11603158]])我想逐个比较这三个 numpy.ndarray 并找出哪个数组的概率最大。其中三个数组的长度相同。我试图实现这样的事情,这是不正确的。for i in range(len(predict_prob1)):    if(predict_prob1[i] > predict_prob2[i])        c = predict_prob1[i]    else        c = predict_prob2[i]    if(c > predict_prob3[i])        result = c    else        result = array[i]请帮忙!!
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

如果你想要的结果是一个 4x2 数组,它索引三个数组中哪个位置的最大值,i,j那么你想要使用np.argmax


>>> import numpy as np

>>> predict_prob1 =([[0.95602106, 0.04397894],

    [0.93332366, 0.06667634],

    [0.97311459, 0.02688541],

    [0.97323962, 0.02676038]])

>>> predict_prob2 =([[0.70425144, 0.29574856],

    [0.69751251, 0.30248749],

    [0.7072872 , 0.2927128 ],

    [0.68683139, 0.31316861]])

>>> predict_prob3 =([[0.56551921, 0.43448079],

    [0.93321106, 0.06678894],

    [0.92345399, 0.07654601],

    [0.88396842, 0.11603158]])

>>> np.argmax((predict_prob1,predict_prob2,predict_prob3), 0)

array([[0, 2],

       [0, 1],

       [0, 1],

       [0, 1]])

>>>

附录


阅读了 OP 的评论后,我将以下内容添加到我的答案中


>>> names = np.array(['predict_prob%d'%(i+1) for i in range(3)])

>>> names[np.argmax((predict_prob1,predict_prob2,predict_prob3),0)]

array([['predict_prob1', 'predict_prob3'],

       ['predict_prob1', 'predict_prob2'],

       ['predict_prob1', 'predict_prob2'],

       ['predict_prob1', 'predict_prob2']], dtype='<U13')

>>> 


查看完整回答
反对 回复 2021-11-30
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

你可以这样做np.maximum.reduce:


np.maximum.reduce([A, B, C])

其中A, B,C是numpy.ndarray


对于您的示例,它的结果是:


[[0.95602106 0.43448079]

 [0.93332366 0.30248749]

 [0.97311459 0.2927128 ]

 [0.97323962 0.31316861]]


查看完整回答
反对 回复 2021-11-30
?
守候你守候我

TA贡献1802条经验 获得超10个赞

假设您想要,对于每一行,类别 0 的概率最高的数组的索引:


which = 0


np.stack([predict_prob1, predict_prob2, predict_prob3], axis=2)[:, which, :].argmax(axis=1)

输出:


array([0, 0, 0, 0])

对于第 1 类:


array([2, 1, 1, 1])


查看完整回答
反对 回复 2021-11-30
  • 3 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信