@Lucs88: Ich wüsste so auf Anhieb nicht wie das gehen sollte.
Anmerkungen zum gezeigten Code: `m` und `n` als Argumente sind überflüssig, die Werte kann man ja von `X_1` ermitteln.
Eingerückt wird in Python mit vier Leerzeichen pro Ebene, nicht mit Tabs. Insbesondere mischt man die nicht, denn das ``return`` und die Zeile davor sehen zwar im Beitrag richtig eingerückt aus, sind es aber nicht! Genau wegen solcher Probleme: keine Tabs.
Namen werden klein_mit_unterstrichen geschrieben. Ausnahmen: Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Einbuchstabige und dann auch noch nummerierte Namen sind selten gute Namen.
Nach Kommas und um binäre Operatoren erhöhen Leerzeichen die Lesbarkeit.
Semikolons sind dazu da um Anweisungen voneinander zu trennen, nicht um sie abzuschliessen. Man kann zwar eine Anweisung von einer leeren Anweisung trennen, aber das macht keinen Sinn. Das Semikolon braucht man in Python nur sehr selten, weil für lesbaren Code die Richtlinie eine Anweisung pro Zeile gilt.
Schleifen über Indexwerte die per `range()` erzeugt werden sind in Python ein „anti pattern“. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den Umweg über einen Index. Falls man *zusätzlich* eine laufende Zahl braucht, gibt es `enumerate()`, und wenn man ”parallel” über mehr als eine Sequenz iterieren will, gibt es `zip()`.
Den Index des grössten Elements kann man vor der Schleife für alle Zeilen des Arrays bestimmen.
Ungetestet:
Code: Alles auswählen
def update_iterated_dataset(data):
height, width = data.shape
result = np.zeros((height, width - 1))
for max_index, row, result_row in zip(data.argmax(1), data, result):
result_row[:] = np.hstack([row[:max_index], row[max_index + 1:]])
return result