Ich benutze es oft, aber ich vergesse es oft, also mach dir eine Notiz
argmax ()
Es funktioniert gut, wenn es verwendet wird.
Der Titel ist möglicherweise schwer zu verstehen. Erklären Sie daher ausführlich, was Sie tun möchten.
Für numpy.array
möchten Sie möglicherweise die kumulative Summe ( cumsum
) berechnen und den kleinsten Index finden, der den Schwellenwert für die kumulative Summe überschreitet.
Zum Beispiel
In [143]: score
Out[143]:
array([[ 1.05262936e-01, 1.05262936e-01, 1.05262936e-01,
1.05262936e-01, 1.05262936e-01, 1.57894404e-01,
1.05262936e-01, 1.05262936e-01, 2.10525873e-06,
1.05262936e-01],
[ 1.66664722e-01, 1.66664722e-06, 1.66664722e-01,
2.49997083e-01, 1.66664722e-06, 2.49997083e-01,
1.66664722e-01, 3.33329444e-06, 3.33329444e-06,
1.66664722e-06],
[ 9.09090909e-02, 9.09090909e-02, 9.09090909e-02,
9.09090909e-02, 9.09090909e-02, 1.21212121e-01,
1.21212121e-01, 9.09090909e-02, 9.09090909e-02,
1.21212121e-01]])
In [144]: score.shape
Out[144]: (3, 10)
Wenn es ein solches Array gibt, die kumulative Summe davon
In [145]: score.cumsum(1)
Out[145]:
array([[ 0.10526294, 0.21052587, 0.31578881, 0.42105175, 0.52631468,
0.68420909, 0.78947202, 0.89473496, 0.89473706, 1. ],
[ 0.16666472, 0.16666639, 0.33333111, 0.58332819, 0.58332986,
0.83332694, 0.99999167, 0.999995 , 0.99999833, 1. ],
[ 0.09090909, 0.18181818, 0.27272727, 0.36363636, 0.45454545,
0.57575758, 0.6969697 , 0.78787879, 0.87878788, 1. ]])
Sind Schwellenwerte
In [149]: threshold = np.random.random((3, 1))
In [150]: threshold
Out[150]:
array([[ 0.62732896],
[ 0.46494853],
[ 0.54341381]])
Ich möchte den kleinsten Index unter den größeren Elementen. In diesem Beispiel ist es "Punktzahl [0, 5], Punktzahl [1, 3], Punktzahl [2, 5]". Wenn Sie also das Ergebnis von "[5, 3, 5]" erhalten Gut.
Als ich zu der ersten Schlussfolgerung zurückkam und "argmax" von "numpy" verwendete, erhielt ich die Ausgabe, die ich für ein gutes Shioume wollte.
In [155]: score.cumsum(1) > threshold
Out[155]:
array([[False, False, False, False, False, True, True, True, True,
True],
[False, False, False, True, True, True, True, True, True,
True],
[False, False, False, False, False, True, True, True, True,
True]], dtype=bool)
In [156]: np.argmax(score.cumsum(1) > threshold, 1)
Out[156]: array([5, 3, 5], dtype=int64)
argmax
scheint den kleinsten Index unter den Indizes zurückzugeben, die den Maximalwert annehmen.
Im Gegenteil, es war unmöglich, den maximalen Index unter den Elementen unterhalb des Schwellenwerts zu finden. Ich möchte "[4, 3, 4]"
In [176]: score.cumsum(1) < threshold
Out[176]:
array([[ True, True, True, True, True, False, False, False, False,
False],
[ True, True, True, False, False, False, False, False, False,
False],
[ True, True, True, True, True, False, False, False, False,
False]], dtype=bool)
In [178]: np.argmin(score.cumsum(1) < threshold, 1)
Out[178]: array([5, 3, 5], dtype=int64)
In [179]: np.argmax(score.cumsum(1) < threshold, 1)
Out[179]: array([0, 0, 0], dtype=int64)
Es wird so sein.
Ist es gerecht, nach etwas Coolem wie "np.where" zu fragen? Bitte lassen Sie mich wissen, wenn jemand coole Tipps hat.
Recommended Posts