2016-01-05 5 views
5

Mam tablicę 4D "a" o rozmiarze (2,3,4,4) wypełnioną zerami.Tablica NumPy indeksująca tablicę 4D

import numpy as np 
a = np.zeros((2,3,4,4)) 

muszę również 3D tablicy 'b' wielkości (2,3,4), które wykonuje pewne wartości indeksu (wszystkie od 0 do 3).

Co chcę zrobić, to wymienić element każdego ostatniej tablicy w „a” (4. wymiar „A”), która odpowiada wskaźnikowi w „b”, z 1.

mogę zrobić to z 3 dla pętli, jak pokazano poniżej:

for i in a.shape[0]: 
    for j in a.shape[1]: 
     for z in a.shape[2]: 
      a[i,j,z][b[i,j,z]] = 1 

Ale zastanawiałem się, czy nie ma w każdym razie mogę uniknąć pętli w ogóle. Coś podobnego do:

a[b] = 1 

Odpowiedz

4

Tak można to zrobić w vectorized postaci:

p,m,n,r = a.shape 
a.reshape(-1,r)[np.arange(p*m*n),b.ravel()] = 1 

ten powinien uogólniać łatwiej wyższych ndarrays rzędu.