2013-04-29 9 views
11

w Matlab, można przypisać wartości do kilku plasterków tym samym liście:wartość Przypisanie do wielu plastrów w 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 

Jak można to zrobić w Pythonie z numpy tablicy?

>>> 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

Każdy powód, dla którego warto zrobić to w jednym komunikacie zamiast robić to w dwóch instrukcjach? –

+1

@SukritKalra Nie mogę mówić o autorze pytania, ale przykładowy przypadek dotyczy sytuacji, w której próbuje się uzyskać zrozumienie listy z takiego multislice (co staram się zrobić i dlaczego doszedłem do tego pytania). – Pyderman

Odpowiedz

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

print a 

który powinien działać myślę ... Nie wiem, że jej zupełnie co chcesz choć

+0

Czy to może być osiągnąć bez NumPy? – Pyderman

+0

z pewnością nie tak elegancko ... –

+0

Rzeczywiście. NumPy to prawdziwy King Of The One-Liners. – Pyderman

1

Od http://docs.scipy.org/doc/numpy/user/basics.indexing.html (sekcja "Tablice indeksów"). Zauważ, że indeksy dla pożądanych plasterków powinny być zawarte w "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]) 
Powiązane problemy