如何按元素比较 3 个 numpy 数组并将结果作为具有最大值的数组?
How to compare 3 numpy arrays elementwise and get the results as the array with maximum values?
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]
请帮忙!!
假设您想要,对于每一行,class 0:
的概率最高的数组索引
which = 0
np.stack([predict_prob1, predict_prob2, predict_prob3], axis=2)[:, which, :].argmax(axis=1)
输出:
array([0, 0, 0, 0])
对于class 1:
array([2, 1, 1, 1])
你可以用 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]]
对我来说,我不太清楚你在问什么 — 如果你想要的结果是一个 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]])
>>>
附录
阅读 我将以下内容添加到我的回答中
>>> 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')
>>>
您可以利用操作数 > 和 < 产生数组的布尔掩码这一事实。
import numpy as np
predict_prob1 =np.array([[0.95602106, 0.04397894],
[0.93332366, 0.06667634],
[0.97311459, 0.02688541],
[0.97323962, 0.02676038]])
predict_prob2 =np.array([[0.70425144, 0.29574856],
[0.69751251, 0.30248749],
[0.7072872 , 0.2927128 ],
[0.68683139, 0.31316861]])
predict_prob3 =np.array([[0.56551921, 0.43448079],
[0.93321106, 0.06678894],
[0.92345399, 0.07654601],
[0.88396842, 0.11603158]])
predict_prob = (predict_prob1>predict_prob2)*predict_prob1 + (predict_prob1<predict_prob2)*predict_prob2
predict_prob = (predict_prob>predict_prob3)*predict_prob + (predict_prob<predict_prob3)*predict_prob3
print(predict_prob)
结果是:
[[0.95602106 0.43448079]
[0.93332366 0.30248749]
[0.97311459 0.2927128 ]
[0.97323962 0.31316861]]
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]
请帮忙!!
假设您想要,对于每一行,class 0:
的概率最高的数组索引which = 0
np.stack([predict_prob1, predict_prob2, predict_prob3], axis=2)[:, which, :].argmax(axis=1)
输出:
array([0, 0, 0, 0])
对于class 1:
array([2, 1, 1, 1])
你可以用 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]]
对我来说,我不太清楚你在问什么 — 如果你想要的结果是一个 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]])
>>>
附录
阅读
>>> 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')
>>>
您可以利用操作数 > 和 < 产生数组的布尔掩码这一事实。
import numpy as np
predict_prob1 =np.array([[0.95602106, 0.04397894],
[0.93332366, 0.06667634],
[0.97311459, 0.02688541],
[0.97323962, 0.02676038]])
predict_prob2 =np.array([[0.70425144, 0.29574856],
[0.69751251, 0.30248749],
[0.7072872 , 0.2927128 ],
[0.68683139, 0.31316861]])
predict_prob3 =np.array([[0.56551921, 0.43448079],
[0.93321106, 0.06678894],
[0.92345399, 0.07654601],
[0.88396842, 0.11603158]])
predict_prob = (predict_prob1>predict_prob2)*predict_prob1 + (predict_prob1<predict_prob2)*predict_prob2
predict_prob = (predict_prob>predict_prob3)*predict_prob + (predict_prob<predict_prob3)*predict_prob3
print(predict_prob)
结果是:
[[0.95602106 0.43448079]
[0.93332366 0.30248749]
[0.97311459 0.2927128 ]
[0.97323962 0.31316861]]