2009-01-07 15 views
11

Tôi không thể tìm thấy chức năng trong matlab hoặc quãng tám để làm những gì tôi muốn. Tôi có ma trận m hai cột (giá trị x và y). Tôi biết rằng tôi có thể trích xuất cột bằng cách thực hiện m (:, 1) hoặc m (:, 2). Tôi muốn chia nó thành các ma trận nhỏ hơn [có khả năng] bằng kích thước và vẽ đồ thị trung bình của các ma trận này. Nói cách khác, tôi muốn đặt các giá trị vào các thùng dựa trên các giá trị x, sau đó tìm phương tiện của các thùng. Tôi cảm thấy như chức năng lịch sử sẽ giúp tôi, nhưng nó dường như không.Binning in matlab

Có ai biết chức năng tích hợp để thực hiện việc như thế này không?

chỉnh sửa

tôi đã có ý định đề cập đến mà tôi nhìn hist và không thể có được nó để làm những gì tôi muốn, nhưng nó phải đã quên khuấy đi.

Ví dụ: Giả sử tôi có như sau (tôi đang cố gắng này trong quãng tám, nhưng afaik nó hoạt động trong matlab):

x=1:20; 
y=[1:10,10:1]; 
m=[x, y]; 

Nếu tôi muốn 10 thùng, tôi muốn m được chia thành :

m1=[1:2, 1:2] 
... 
m5=[9:10, 9:10] 
m6=[10:11, 10:-1:9] 
... 
m10=[19:20, 2:-1:1] 

và sau đó lấy giá trị trung bình của mỗi thùng.

Cập nhật: Tôi đã đăng câu hỏi tiếp theo here. Tôi sẽ đánh giá cao câu trả lời.

+0

Tôi không chắc là tôi hiểu câu hỏi của bạn, bạn có thể minh họa những gì bạn đang nói với một ví dụ? – sundar

Trả lời

19

Tôi đã trả lời này trong hình thức video trên blog của tôi:

http://blogs.mathworks.com/videos/2009/01/07/binning-data-in-matlab/

Đây là mã:

m = rand(10,2); %Generate data 

x = m(:,1); %split into x and y 
y = m(:,2); 

topEdge = 1; % define limits 
botEdge = 0; % define limits 
numBins = 2; % define number of bins 

binEdges = linspace(botEdge, topEdge, numBins+1); 

[h,whichBin] = histc(x, binEdges); 

for i = 1:numBins 
    flagBinMembers = (whichBin == i); 
    binMembers  = y(flagBinMembers); 
    binMean(i)  = mean(binMembers); 
end 
+1

Rất rõ ràng và đơn giản. Cảm ơn bạn. –

+2

@MatlabDoug Nó có thể là tốt hơn để làm một cái gì đó như topEdge = max (x); botEdge = min (x); do đó, rõ ràng là những con số đó đến từ đâu. –