Ich habe ein numpy Array wie:

a = np.arange(30)

Ich weiß, dass ich die Werte an den Positionen indices=[2,3,4] ersetzen kann, indem ich beispielsweise eine ausgefallene Indizierung verwende:

a[indices] = 999

Aber wie kann man die Werte an den Positionen ersetzen, die sich nicht in indices befinden? Wäre so etwas wie unten?

a[ not in indices ] = 888

Vielen Dank!

33
Saullo G. P. Castro 5 Juni 2013 im 17:12

3 Antworten

Beste Antwort

Ich kenne keinen sauberen Weg, um so etwas zu tun:

mask = np.ones(a.shape,dtype=bool) #np.ones_like(a,dtype=bool)
mask[indices] = False
a[~mask] = 999
a[mask] = 888

Wenn Sie den numpy-Datentyp bevorzugen, können Sie natürlich dtype=np.bool_ verwenden. Es gibt keinen Unterschied in der Ausgabe. es ist wirklich nur eine Frage der Präferenz.

46
mgilson 5 Juni 2013 im 13:51

Funktioniert nur für 1d-Arrays:

a = np.arange(30)
indices = [2, 3, 4]

ia = np.indices(a.shape)

not_indices = np.setxor1d(ia, indices)
a[not_indices] = 888
6
aaren 26 Okt. 2013 im 00:19

Überwinde einfach eine ähnliche Situation, die auf diese Weise gelöst wurde:

a = np.arange(30)
indices=[2,3,4]

a[indices] = 999

not_in_indices = [x for x in range(len(a)) if x not in indices]

a[not_in_indices] = 888
4
Alexey Trofimov 12 März 2017 im 09:20