【问题标题】:Binning in matlabmatlab中的分箱
【发布时间】:2010-09-29 23:20:45
【问题描述】:

我一直无法在 matlab 或 octave 中找到一个函数来做我想做的事。 我有一个包含两列(x 和 y 值)的矩阵 m。我知道我可以通过执行 m(:,1) 或 m(:,2) 来提取列。我想把它分成[可能]大小相等的更小的矩阵,并绘制这些矩阵的平均值。换句话说,我想根据 x 值将值放入 bin 中,然后找到 bin 的平均值。我觉得 hist 函数应该可以帮助我,但似乎没有。

有没有人知道内置函数可以做这样的事情?

编辑

我本来打算提到我查看了 hist 并不能让它做我想做的事,但它一定是我的想法。

示例:假设我有以下内容(我在 octave 中尝试这个,但是 afaik 它在 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。我将不胜感激。

【问题讨论】:

  • 我不确定我是否理解你的问题,你能用一个例子来说明你在说什么吗?

标签: matlab matrix octave


【解决方案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

【讨论】:

  • @MatlabDoug 做类似 topEdge = max(x); 的事情可能会更好。 botEdge = min(x);所以很清楚这些数字的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多