Nehmen wir an, a
ist das ursprüngliche Array und b
ist die Zuordnungsregel. Da die Zuordnungsregel sagt "bei welchem Index in dem neuen Vektor der Wert gefunden werden kann", müssen Sie a[c]
berechnen, wobei c
der inverse der Permutation b
ist. Die Berechnung der inversen Permutation ist addressed in detail elsewhere, so dass ich von dort eine der Lösungen holen werden:
c = np.zeros(b.size, b.dtype)
c[b] = np.arange(b.size)
new_array = a[c]
Beispiel: Wenn ein [7, 8, 9]
und b [1, 2, 0]
, dies gibt [9, 7, 8]
. Lassen Sie uns:
- 7 ging auf Position 1,
- 8 ging auf Position 2,
- 9 gingen 0
Das Ergebnis ist korrekt zu positionieren.
Wenn Sie a[b]
tun, wie von Bort vorgeschlagen, wäre das Ergebnis [8, 9, 7]
, die anders ist. In der Tat, in dieser Version die Einträge von b
sagen, wo die Zahlen von kam in der ursprünglichen Anordnung:
- 8 kam von Position 1
- 9 von der Position kam 2
- 7 kam von Position 0
die Angelegenheit zu verwirren, das Beispiel, das Sie ist gab eine Permutation, die auf den inversen gleich ist, so ist der Unterschied verloren.
Ich verstehe die Zuordnungsregel nicht. Meinst du 0, 3, 1, 2? – kazemakase
'a = np.asarray ([1,0,0,1]); b = np.asarray ([0,3,1,2]); a [b] ' – Bort
@Bort Das macht nicht, was das OP will: siehe meine Antwort. – FTP