2017-05-11 1 views
3

Lassen Sie uns sagen, dass ich ein 4D-Array haben, dieWie ersetzt man Werte in einem 4-dimensionalen Array?

(600, 1, 3, 3) 

ist Wenn Sie die ersten zwei Elemente nehmen sie wie folgt aussehen:

0 1 0 
1 1 1 
0 1 0 

2 2 2 
3 3 3 
1 1 1 

etc 

ich eine Liste haben, die bestimmte Gewichte enthält, die ich will ersetzen bestimmte Werte im Array. Mein Ziel ist es, den Index des Listenelements mit dem Wert im Array zu vergleichen. Daher ist diese Liste

[0.1 1.1 1.2 1.3] 

wenn gegen meine Anordnung angelegt würde dieses Ergebnis liefern:

0.1 1.1 0.1 
1.1 1.1 1.1 
0.1 1.1 0.1 

1.2 1.2 1.2 
1.3 1.3 1.3 
1.1 1.1 1.1 

etc 

Dieses Verfahren würde durch die gesamten 600 Elemente des Arrays laufen muß.

Ich kann mit wollte in einer klobigen Art und Weise tue dies eine for Schleife und array[array==x] = y oder np.place aber ich eine Schleife vermeiden und vielleicht eine Methode verwenden, die auf einmal alle Werte ersetzen werden. Gibt es einen solchen Ansatz?

+1

Einfach in die Array-Version indizieren: 'np.asarray (vals) [idx]', wo 'vals' die Liste und' idx' die 4D-Indizes sind? Oder verwenden Sie 'np.take (vals, idx)', um die Array-Konvertierung unter den Hauben durchzuführen. – Divakar

+0

das funktioniert vielleicht, aber wie wenden Sie es auf das 4D Array an? – pepe

+0

Ich habe Ihnen gerade gesagt, dass - "idx" ist das '4D' Array von Indizes. – Divakar

Antwort

1

Zitiert von @ Divakar-Lösung in den Kommentaren, die das Problem auf eine sehr effiziente Art und Weise löst:

einfach Index in das Array-Version: np.asarray(vals)[idx], wo vals ist die Liste und idx ist das Array . Oder verwenden Sie np.take(vals, idx), um die Array-Konvertierung unter der Haube durchzuführen.

Verwandte Themen