2013-04-29 10 views
11

in Matlab, è possibile assegnare un valore a più sezioni della stessa lista:assegnare il valore a più sezioni in NumPy

>> a = 1:10 

a = 

    1  2  3  4  5  6  7  8  9 10 

>> a([1:3,7:9]) = 10 

a = 

    10 10 10  4  5  6 10 10 10 10 

Come si può fare questo in Python con un allineamento numpy?

>>> a = np.arange(10) 

>>> a 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

>>> a[1:3,7:9] = 10 
IndexError: too many indices 
+0

Qualsiasi motivo per cui si potrebbe desiderare di farlo in una dichiarazione invece di farlo in due dichiarazioni? –

+1

@SukritKalra Non posso parlare per l'autore della domanda, ma un caso esemplificativo è quando si cerca di formare una lista di comprensione da un tale multislice (che è quello che sto cercando di fare e perché sono arrivato a questa domanda) – Pyderman

risposta

7
a = np.arange(10) 
a[[range(3)+range(6,9)]] = 10 
#or a[[0,1,2,6,7,8]] = 10 

print a 

che dovrebbe funzionare penso ... Non so che il suo proprio quello che vuoi se

+0

Può essere raggiunto senza NumPy? – Pyderman

+0

certamente non altrettanto elegante ... –

+0

Infatti. NumPy è il vero re degli One-Liners. – Pyderman

1

Da http://docs.scipy.org/doc/numpy/user/basics.indexing.html (Sezione "Matrici di indici"). Si noti che gli indici per le sezioni desiderate dovrebbero essere contenuti in 'np.array()'.

>>> x = np.arange(10,1,-1) 
>>> x 
array([10, 9, 8, 7, 6, 5, 4, 3, 2]) 

>>> x[np.array([3, 3, 1, 8])] 
array([7, 7, 9, 2]) 
Problemi correlati