سؤال

لم أتمكن من العثور على وظيفة في MATLAB أو اوكتاف للقيام بما أريد.لدي مصفوفة m مكونة من عمودين (قيم x و y).أعلم أنه يمكنني استخراج العمود عن طريق القيام بـ m(:,1) أو m(:,2).أريد تقسيمها إلى مصفوفات أصغر ذات حجم متساوٍ [يحتمل] ورسم متوسط ​​هذه المصفوفات.بمعنى آخر، أريد وضع القيم في صناديق بناءً على قيم x، ثم العثور على وسائل الصناديق.أشعر أن وظيفة Hist يجب أن تساعدني، لكن لا يبدو أنها كذلك.

هل يعرف أحد وظيفة مضمنة للقيام بشيء مثل هذا؟

يحرر

كنت أنوي أن أذكر أنني نظرت إلى التاريخ ولم أتمكن من جعله يفعل ما أردت، ولكن لا بد أنه غاب عن ذهني.

مثال:لنفترض أن لدي ما يلي (أحاول ذلك في الأوكتاف، ولكن أفيك يعمل في MATLAB):

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

إذا كنت أريد 10 صناديق، أود أن يتم تقسيمها إلى:

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

ومن ثم الحصول على متوسط ​​كل بن.

تحديث:لقد نشرت سؤال المتابعة هنا.وسأكون ممتنا للغاية الردود.

هل كانت مفيدة؟

المحلول

لقد أجبت على هذا في شكل فيديو على مدونتي:

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

هنا هو الرمز:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top