by Anonymous » Yesterday, 21:38
Ich habe ein 1D-Numpy-Array und möchte den Index des letzten ungleich-Elements finden. Der Vektor besteht nur aus 1s und 0s, nicht sicher, ob dies relevante Informationen sind.
Code: Select all
import numpy as np
vec = np.array([0, 1, 1, 0, 0, 1, 0, 0])
In diesem Fall sollte das Ergebnis 5 sein, da VEC [5] == 1 der letzte Wert ungleich Null ist. so leistungsfähig wie möglich sein. Jede kleine Kante hilft. < /P>
Hier sind zwei Ansätze, die ich derzeit habe. Eine, die Standard -Python -Loops verwendet, der andere versucht, das zu nutzen, was Numpy mir gibt. Ich habe das Gefühl, dass es eine elegante Möglichkeit geben könnte, dies noch leistungsfähiger zu machen, aber ich bin eingeschränkt, indem ich nur einen Wirtschaftsabschluss habe.
Code: Select all
def last_nonzero_index(vec):
for i in range(len(vec) - 1, -1, -1):
if vec[i] != 0:
return i
return None
< /code>
def last_nonzero_index(vec):
rev_idx = np.flatnonzero(vec[::-1])
return len(vec) - 1 - rev_idx[0] if rev_idx.size else None
Im Moment schlägt die native Python -Schleife alles andere.
Ich habe ein 1D-Numpy-Array und möchte den Index des letzten ungleich-Elements finden. Der Vektor besteht nur aus 1s und 0s, nicht sicher, ob dies relevante Informationen sind.[code]import numpy as np
vec = np.array([0, 1, 1, 0, 0, 1, 0, 0])
[/code]
In diesem Fall sollte das Ergebnis 5 sein, da VEC [5] == 1 der letzte Wert ungleich Null ist. so leistungsfähig wie möglich sein. Jede kleine Kante hilft. < /P>
Hier sind zwei Ansätze, die ich derzeit habe. Eine, die Standard -Python -Loops verwendet, der andere versucht, das zu nutzen, was Numpy mir gibt. Ich habe das Gefühl, dass es eine elegante Möglichkeit geben könnte, dies noch leistungsfähiger zu machen, aber ich bin eingeschränkt, indem ich nur einen Wirtschaftsabschluss habe.[code]def last_nonzero_index(vec):
for i in range(len(vec) - 1, -1, -1):
if vec[i] != 0:
return i
return None
< /code>
def last_nonzero_index(vec):
rev_idx = np.flatnonzero(vec[::-1])
return len(vec) - 1 - rev_idx[0] if rev_idx.size else None
[/code]
Im Moment schlägt die native Python -Schleife alles andere.