Frage

Warum die folgenden Zeilen nicht arbeiten, wie ich erwarten?

import numpy as np
a = np.array([0,1,2,1,1])
a[a==1][1:] = 3
print a
>>> [0 1 2 1 1]
# I would expect [0 1 2 3 3]

Ist dies ein ‚Fehler‘ oder gibt es eine andere Art und Weise zu empfehlen, um das?

Auf der anderen Seite sind die folgenden Werke:

a[a==1] = 3
print a
>>> [0 3 2 3 3]

Cheers, Philipp

War es hilfreich?

Lösung

Es scheint, Sie können einfach nicht einen Auftrag über eine Doppelscheibe wie das tun.

Das funktioniert aber:

a[numpy.where(a==1)[0][1:]] = 3

Andere Tipps

Es ist damit zusammen, wie Phantasie Indizierung funktioniert. Es gibt eine ausführliche Erklärung hier . Es wird auf diese Weise getan inplace Modifikation mit ausgefallener Indizierung (dh a[x>3] *= 2) zu ermöglichen. Eine Folge davon ist, dass Sie nicht zu einem doppelten Index zuweisen können, wie Sie gefunden haben. Fancy Indizierung immer gibt eine Kopie statt einer Ansicht.

Da die a [a == 1] Teil nicht wirklich eine Scheibe ist. Es erstellt ein neues Array. Es macht Sinn, wenn man darüber nachdenkt es-- Sie nur die Elemente, aus denen dem boolean Zustand (wie eine Filteroperation) erfüllen.

Das tut, was Sie wollen

a[2:][a[2:]==1]=3
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top