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.
Che dire di solo "arr = arr [:,:, :: 2]'? – Divakar
@Divakar Ok, questo ha effettivamente risolto tutto. Ti spiace spiegare perché ':: 2' funzioni diversamente da' 1 :: 2'? – David
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