2015-07-13 17 views
7

Non posso per la vita di me capirlo.Rimozione di ogni altro elemento in NumPy

Sto provando a rimuovere ogni altro elemento nel secondo asse di un array. L'ho fatto in MATLAB con arr(:,:,2:2:end) = [];, ma quando ho provato a fare lo stesso in Python e confrontare le due uscite, ottengo una matrice diversa.

Ho provato arr = np.delete(arr,np.arange(0,arr.shape[2],2),2) e arr = arr[:,:,1::2], ma nessuno dei due sembra aver trovato qualcosa con MATLAB.



Esempio:

MATLAB

disp(['before: ',str(arr[21,32,11])]) 
    arr(:,:,2:2:end) = []; 
    disp(['after: ',str(arr[21,32,11])]) 

uscita:

before: 99089 
    after: 65699 


Python

print 'before: ' + str(arr[20,31,10]) 
    arr = arr[:,:,1::2] # same output as np.delete(arr,np.arange(0,arr.shape[2],2),2) 
    print 'after: ' + str(arr[20,31,10]) 

uscita:

before: 99089 
    after: 62360 

Spero non mi si affaccia qualcosa di fondamentale.

+1

Che dire di solo "arr = arr [:,:, :: 2]'? – Divakar

+0

@Divakar Ok, questo ha effettivamente risolto tutto. Ti spiace spiegare perché ':: 2' funzioni diversamente da' 1 :: 2'? – David

+1

Bene '[1 :: 2]' inizia l'indicizzazione da parte di '[1]' i.e. '2nd' in poi, ma dall'elemento' 1st' i.e. '[0]' in poi. Quindi, in alternativa, puoi fare arr = arr [:,:, 0 :: 2] per indicare la stessa cosa ed effetto. – Divakar

risposta

4

Si sta tentando di eliminare ogni altro elemento a partire dal secondo elemento in poi nell'ultimo asse. In altre parole, stai cercando di mantenere ogni altro elemento a partire dal primo elemento in poi in quell'asse.

Così, lavorando dall'altra modo intorno di selezionare elementi invece che eliminare elementi, il codice MATLAB arr(:,:,2:2:end) = [] sarebbe equivalente (trascurando i numeri delle prestazioni):

arr = arr(:,:,1:2:end) 

In Python/NumPy, questo sarebbe essere:

arr = arr[:,:,0::2] 

O semplicemente:

arr = arr[:,:,::2] 
+0

Ah, ora ha perfettamente senso! Grazie per aver dedicato del tempo per spiegarlo :) – David

+0

@David Awesome, kool! – Divakar

Problemi correlati