2013-04-29 42 views
11

Trong Matlab, bạn có thể gán một giá trị cho nhiều lát cùng một danh sách:Gán giá trị cho nhiều lát trong 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 

Làm thế nào bạn có thể làm điều này trong Python với một mảng 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

Bất kỳ lý do nào bạn có thể muốn thực hiện trong một tuyên bố thay vì thực hiện trong hai câu? –

+1

@SukritKalra Tôi không thể nói cho tác giả câu hỏi, nhưng một trường hợp ví dụ là khi một người đang cố gắng để tạo ra một danh sách hiểu từ một multislice (đó là những gì tôi đang cố gắng làm và tại sao tôi đến câu hỏi này) – Pyderman

Trả lời

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

print a 

rằng nên làm việc tôi nghĩ ... Tôi không biết rằng nó khá những gì bạn muốn mặc dù

+0

đạt được mà không có NumPy? – Pyderman

+0

chắc chắn không phải là thanh lịch ... –

+0

Thật vậy. NumPy là vị vua thực sự của One-Liners. – Pyderman

1

Từ http://docs.scipy.org/doc/numpy/user/basics.indexing.html (Mục "Mảng chỉ mục"). Lưu ý rằng các chỉ mục cho các lát mong muốn phải được chứa trong '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]) 
Các vấn đề liên quan