[PYTHON] Suchen Sie mit numpy den kleinsten Index, der den kumulativen Summenschwellenwert erfüllt

Ich benutze es oft, aber ich vergesse es oft, also mach dir eine Notiz

Fazit zuerst

argmax () Es funktioniert gut, wenn es verwendet wird.

Was du machen willst

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.

Jedoch. .. ..

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

Suchen Sie mit numpy den kleinsten Index, der den kumulativen Summenschwellenwert erfüllt
Finden Sie mit NumPy die Position über dem Schwellenwert
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Der kleinste Hinweis der Welt wurde mit numpy & numba gelöst
[Python] Finden Sie den zweitkleinsten Wert.
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python
Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor