2014-09-10 19 views
6

Mam tablicę numpy A z n wierszami o rozmiarze 3. Każdy wiersz składa się z trzech liczb całkowitych, z których każda jest liczbą całkowitą, która odnosi się do innej pozycji wewnątrz tablicy numpy. Na przykład Jeśli chcę wiersze odesłane przez N[4], używam N[N[4]]. Wizualnie:Dziwne przypisanie w tablicach numpy

N = np.array([[2, 3, 6], [12, 6, 9], [3, 10, 7], [8, 5, 6], [3, 1, 0] ... ]) 
N[4] = [3, 1 ,0] 
N[N[4]] = [[8, 5, 6] 
      [12, 6, 9] 
      [2, 3, 6]] 

ja budowania funkcji modyfikujący N, i trzeba zmodyfikować N [N [x]] W pewnym określonym X, która jest parametrem też (cztery w przykładzie). Chcę zmienić cały 6 w subarray na inny numer (powiedzmy 0), więc używam numpy.where znaleźć indeksów, które są

where_is_6 = np.where(N[N[4]] == 6) 

Teraz, jeśli mogę wymienić bezpośrednio jak N[N[4]][where_is_6] = 0 tam nie ma zmiana. Jeśli utworzę poprzednią referencję, taką jak var = N[N[4]], a następnie var[where_is_6], zmiana zostanie wykonana, ale lokalnie do funkcji i N nie zostanie zmieniona globalnie. Co mogę zrobić w tym przypadku? albo co robię źle?

+0

Indeksowanie z innym indeksowania nie będą działać ze sposobu zdefiniowanego listę' n'. Najpierw musisz przekonwertować N na 'numpy.array()'. –

+0

Powiedziałem, że to tablica numpy, kod jednak nie odzwierciedla tego, edycja teraz ... –

Odpowiedz

6

Brzmi jak wystarczy przekształcić indeksy do oryginalnych N „s współrzędnymi:

row_idxs = N[4] 
r,c = np.where(N[row_idxs] == 6) 
N[row_idxs[r],c] = 0 
+0

+1 rzeczywiście rozwiązuje problem! –

+0

Tak! Dzięki! Będę myślał w ten sposób następnym razem, gdy będę musiał coś zmienić. –

4

Problemem jest to, że N[N[4]] jest nowa tablica, który można sprawdzić robi:

print(N[N[4]].flags) 

C_CONTIGUOUS : True 
F_CONTIGUOUS : False 
OWNDATA : True 
WRITEABLE : True 
ALIGNED : True 
UPDATEIFCOPY : False 

gdzie OWNDATA pokazuje ten fakt.

+0

Dzięki za wskazówkę .flags! Co więc mogę zrobić, aby dokonać zmiany? –

+1

@AlejandroSazo cóż ... odpowiedź perimosocordiae wydaje się być dobrym rozwiązaniem –

Powiązane problemy