2017-11-02 1 views
1

Ich möchte Elemente von einem Array durch Indexierung für jede Spalte abrufen. zum Beispiel ein Index wie:numpy Indizierung für jede Spalte

[[1, 3], 
[2, 4]] 

Würde bedeuten:

  1. das 1. und 2. Element der nullten Spalte des Arrays erhalten, und sie in der nullten Spalte des Ergebnisses gesetzt.

  2. Holen Sie das 3. und 4. Element der 1. Spalte des Arrays, und legen Sie sie in der 1. Spalte des Ergebnisses.

Programm:

import numpy as np 
arr = np.arange(12).reshape(3,4) 
print(arr) 

ind = np.array(
    [[1,1,1,1], 
    [2,2,2,2]] 
) 

result = arr[np.arange(2)[:, np.newaxis], ind[np.newaxis,:]] 
print(result) 

Ergebnis:

[[ 0 1 2 3] 
[ 4 5 6 7] 
[ 8 9 10 11]] 

[[[1 1 1 1] 
    [6 6 6 6]]] 

Erwartetes Ergebnis:

[[ 0 1 2 3] 
[ 4 5 6 7] 
[ 8 9 10 11]] 

[[[4 5 6 7] 
    [8 9 10 11]]] 

Wie das erwartete Ergebnis bekommen?

Antwort

0

Dies funktioniert:

import numpy as np 
x = np.arange(12).reshape(3,4) 

y = np.array(
    [[1,1,1,1], 
    [2,2,2,2]] 
) 

z = x[y[:, np.newaxis], np.arange(4)[np.newaxis, :]] 

print(z) 

Ergebnis:

[[[ 4 5 6 7]] 

[[ 8 9 10 11]]] 
+0

aber ich weiß nicht, warum. –

+0

Ok. Ich verstehe es. es ist nur um die richtige Achse zu senden. –