我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作。
我有一个两列的矩阵 m (x 和 y 值)。我知道我可以通过执行 m(:,1) 或 m(:,2) 来提取列。我想将其分成[可能]大小相等的较小矩阵,并绘制这些矩阵的平均值。换句话说,我想根据 x 值将值放入 bin 中,然后找到 bin 的平均值。我觉得 hist 函数应该对我有帮助,但似乎没有。
有谁知道有一个内置函数可以做这样的事情?
edit
我本来想提到我查看了 hist,但无法让它执行我想要的操作,但我一定忘记了。
示例:假设我有以下内容(我正在八度音程中尝试此操作,但据我所知它可以在 matlab 中工作):
x=1:20;
y=[1:10,10:1];
m=[x, y];
如果我想要 10 个 bin,我希望将 m 分成:
m1=[1:2, 1:2]
...
m5=[9:10, 9:10]
m6=[10:11, 10:-1:9]
...
m10=[19:20, 2:-1:1]
然后得到每个 bin 的平均值。
更新:我已经发布了一个后续问题here https://stackoverflow.com/questions/427221/better-non-linear-binning。我将非常感谢您的回复。
我在我的博客上以视频形式回答了这个问题:
http://blogs.mathworks.com/videos/2009/01/07/binning-data-in-matlab/ 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)