2013-07-01 57 views
7

Tôi đang cố gắng sắp xếp các giá trị trong một mảng numpy để tôi có thể lưu trữ tất cả các giá trị trong một phạm vi nhất định (Điều đó có thể có thể được diễn đạt tốt hơn). Dù sao bệnh cũng đưa ra một ví dụ về những gì tôi đang cố gắng làm. Tôi có một mảng gọi là thùng trông như thế này:Làm cách nào để sắp xếp các giá trị trong một mảng có nhiều mảng vào các thùng chứa một phạm vi giá trị nhất định?

bins = array([11,11.5,12,12.5,13,13.5,14]) 

Tôi cũng đã mảng khác gọi avgs:

avgs = array([11.02, 13.67, 11.78, 12.34, 13.24, 12.98, 11.3, 12.56, 13.95, 13.56, 
       11.64, 12.45, 13.23, 13.64, 12.46, 11.01, 11.87, 12.34, 13,87, 13.04, 
       12.49, 12.5]) 

Những gì tôi đang cố gắng làm là để tìm các giá trị chỉ số của mảng avgs rằng nằm trong phạm vi giữa các giá trị của mảng bins. Ví dụ tôi đã cố gắng tạo một vòng lặp while sẽ tạo các biến mới cho mỗi thùng. Thùng đầu tiên sẽ là tất cả những gì nằm giữa bins[0] and bins[1] và sẽ trông như thế:

bin1 = array([0, 6, 15]) 

Những giá trị chỉ số sẽ tương ứng với các giá trị 11,02, 11,3, và 11.01 trong avgs và sẽ là các giá trị của avgs rằng giữa chỉ số giá trị 0 và 1 trong số bins. Tôi cũng cần các thùng khác để ví dụ khác sẽ là:

bin2 = array([2, 10, 16]) 

Tuy nhiên phần thách thức của việc này đối với tôi là rằng kích thước của binsavgs thay đổi dựa trên các thông số khác vì vậy tôi đã cố gắng để xây dựng một cái gì đó mà có thể có thể được mở rộng thành các mảng binsavgs lớn hơn hoặc nhỏ hơn.

Trả lời

9

Numpy có một số chức năng đếm bin khá mạnh.

>>> binplace = np.digitize(avgs, bins) #Returns which bin an average belongs 
>>> binplace 
array([1, 6, 2, 3, 5, 4, 1, 4, 6, 6, 2, 3, 5, 6, 3, 1, 2, 3, 5, 7, 5, 3, 4]) 

>>> np.where(binplace == 1) 
(array([ 0, 6, 15]),) 
>>> np.where(binplace == 2) 
(array([ 2, 10, 16]),) 

>>> avgs[np.where(binplace == 1)] 
array([ 11.02, 11.3 , 11.01]) 
Các vấn đề liên quan