2013-02-08 68 views
6

Tôi đang sử dụng Matlab 2012a.Tìm n giá trị nhỏ nhất trong một mảng

Tôi có một mảng ô k (giả sử 1000). Tôi cần phải tìm 5 giá trị thấp nhất của mảng này và cần phải thực hiện trung bình các giá trị đó trong X và Y.

Bất kỳ ai cũng có ý tưởng làm thế nào để thực hiện điều đó?

+1

là câu hỏi của bạn về các thuật toán để làm điều đó? Bạn đang sử dụng ngôn ngữ lập trình nào? – Alex

+0

Tôi đã chỉnh sửa, xấu của tôi. Tôi đang sử dụng Matlab 2012a – Vissenbot

+0

Cấu trúc dữ liệu của bạn là gì? Bạn đề cập đến "mảng" và "ô" và "X" và "Y". Tôi tạo ra một câu trả lời giả sử bạn có mảng X và Y - nhưng lại đọc câu hỏi của bạn Tôi không thực sự chắc chắn những gì bạn có ... Bạn có thể làm rõ? – Floris

Trả lời

13

Giả sử bạn có mảng X và Y, và bạn muốn tìm ra năm giá trị Y thấp nhất:

[m mi] = sort(Y); 
lowest5index = mi(1:5); 
lowest5Y = Y(lowest5index); 
lowest5X = X(lowest5index); 

meanYlowest5 = mean(lowest5Y); 
meanXlowest5 = mean(lowest5X); 

Giải thích:

Lệnh sort với hai tham số đầu ra trả về cả hai mảng được sắp xếp (trong m) và các chỉ mục trong mảng ban đầu (mi). Năm chỉ số đầu tiên mi(1:5) tương ứng với năm giá trị thấp nhất. Lấy mean các giá trị này cho cả X và Y sẽ làm những gì chúng ta muốn. Nếu tôi không hiểu tuyên bố vấn đề của bạn, vui lòng làm rõ câu hỏi của bạn và tôi sẽ chụp thêm một câu hỏi khác.

+0

ahh, đánh tôi với nó ^^ – Groot

+0

Vâng, xin lỗi tôi đã không đủ rõ ràng. Tôi cần tìm 5 giá trị thấp nhất trong Y và sau đó thực hiện trung bình cả X và Y của 5 điểm này! Kỹ thuật của bạn khá thú vị! Tôi sẽ giữ bí quyết đó nếu nó có ích! – Vissenbot

+0

Kỹ thuật của tôi thực hiện chính xác những gì bạn đang yêu cầu ... Tôi đã chỉnh sửa mã để làm cho nó rõ ràng hơn. Nếu nó vẫn không hiệu quả với bạn, bạn cần giải thích rõ ràng cấu trúc dữ liệu của mình. – Floris

1

Cách thực hiện một sort của mảng của bạn từ giá trị thấp nhất đến giá trị cao nhất và sau đó chọn 5 giá trị đầu tiên. Đó sẽ là giá trị 5 phút của mảng của bạn. Sau đó, thực hiện một giá trị trung bình của 5 giá trị đó.

Đây có thể không phải là cách hiệu quả nhất về bộ nhớ khi thực hiện việc này nhưng chỉ với 1000 giá trị, nó sẽ hoàn thành công việc!

Hy vọng điều đó sẽ hữu ích!

1

sử dụng minmaxselection MATLAB MEX gói, trong đó đã được đặc biệt tối ưu cho vấn đề này:

a = [2,3,4,7,56,4,21, 64, -2]; 
mink(a, 2) 

<< ans = 
<< -2 2  

mink(a,4) 

<< ans = 
<< -2  2  3  4 
Các vấn đề liên quan