2013-04-24 39 views
5

Tôi có một ma trận và vector boolean:Chọn hàng trong một mảng NumPy 2D với một vector boolean

>>>from numpy import * 
>>>a = arange(20).reshape(4,5) 
array([[ 0, 1, 2, 3, 4], 
    [ 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19]]) 

>>>b = asarray([1, 1, 0, 1]).reshape(-1,1) 
array([[1], 
    [1], 
    [0], 
    [1]]) 

Bây giờ tôi muốn chọn tất cả các hàng tương ứng trong ma trận này, nơi chỉ số tương ứng trong vector là bằng không.

>>>a[b==0] 
array([10]) 

Làm cách nào để làm điều này trả về hàng cụ thể này?

[10, 11, 12, 13, 14] 

Trả lời

2

Hình dạng của b là hơi lạ, nhưng nếu bạn có thể thủ công nó như là một chỉ số đẹp hơn đó là một lựa chọn đơn giản:

idx = b.reshape(a.shape[0]) 
print a[idx==0,:] 

>>> [[10 11 12 13 14]] 

Bạn có thể đọc như ", chọn tất cả các hàng nơi chỉ mục là 0 và cho mỗi hàng được chọn sẽ lấy tất cả các cột ". Câu trả lời mong đợi của bạn thực sự phải là danh sách các danh sách vì bạn đang yêu cầu tất cả các hàng phù hợp với tiêu chí.

Các vấn đề liên quan