2010-07-14 30 views
19

Tôi có một mảngLàm thế nào tìm thấy giá trị trong một mảng có thể đáp ứng hai điều kiện sử dụng Python

a=[1,2,3,4,5,6,7,8,9] 

và tôi muốn tìm các chỉ số của phần tử s đáp ứng hai điều kiện tức là

a>3 and a<8 
ans=[3,4,5,6] 
a[ans]=[4,5,6,7] 

tôi có thể sử dụng numpy.nonzero(a>3) hoặc numpy.nonzero(a<8) nhưng không numpy.nonzero(a>3 and a<8) mang đến cho các lỗi:

ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all() 

Khi tôi cố gắng sử dụng any hoặc all Tôi nhận được lỗi tương tự. Có thể kết hợp hai xét nghiệm có điều kiện để nhận được ans không?

+1

lý do tại sao bạn cần gọn gàng, bạn không thể làm như vậy! bộ lọc (lambda a: 3 shahjapan

+1

@shahjapan - có khả năng vì chúng cần tốc độ tăng của một mảng có nhiều mảng vì chúng có thể thực sự có số liệu lớn hơn nhiều * nhiều *. –

Trả lời

22
numpy.nonzero((a > 3) & (a < 8)) 

& thực hiện một boolean khôn ngoan và nguyên tố.

+0

Cảm ơn Matthew, đã làm việc như một sự quyến rũ! – David

3

Một thay thế (mà tôi đã kết thúc sử dụng) là numpy.logical_and:

choice = numpy.logical_and(np.greater(a, 3), np.less(a, 8)) 
numpy.extract(choice, a) 
0

nếu bạn sử dụng mảng NumPy, bạn có thể trực tiếp sử dụng '&' thay vì 'and'.

a=array([1,2,3,4,5,6,7,8,9]) a[(a>3) & (a<8)] ans=array([3,4,5,6])

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