【发布时间】:2014-06-19 16:12:28
【问题描述】:
我的数据包含在 2 个向量中。 然后使用 [n,xout] = hist(x,y) 返回包含频率计数和 bin 位置的向量 n 和 xout。 x 是我的真实数据,y 是我想要构建直方图的部分。 比我使用 bar(xout,n) 来绘制直方图。最后我用高斯拟合来拟合这个直方图。
现在我想知道我的真实数据(向量 x 的每个点)在直方图中的位置? 有人可以帮我弄清楚吗?
【问题讨论】:
我的数据包含在 2 个向量中。 然后使用 [n,xout] = hist(x,y) 返回包含频率计数和 bin 位置的向量 n 和 xout。 x 是我的真实数据,y 是我想要构建直方图的部分。 比我使用 bar(xout,n) 来绘制直方图。最后我用高斯拟合来拟合这个直方图。
现在我想知道我的真实数据(向量 x 的每个点)在直方图中的位置? 有人可以帮我弄清楚吗?
【问题讨论】:
[~, result] = min(abs(bsxfun(@minus, y(:), x(:).')));
这为x 中的每个值提供了y 中最近元素的索引。所以y(result) 是每个x 中y 中最接近的元素。
例子:
>> x = [0.4 1.6 5.3 4.2 3.1 7.8];
>> y = [0 2 4 6 8];
>> [~, result] = min(abs(bsxfun(@minus, y(:), x(:).')))
result =
1 2 4 3 3 5
>> y(result)
ans =
0 2 6 4 4 8
【讨论】:
x(1)等于0.4,result(1)是1,告诉你x(1)在第一个区间;或者y(result(1))是0,告诉你那个区间的中心
你想使用histc。
[binCounts, idx] = histc(x, y);
然后找到x的某个值所在的bin:
bin = idx(x == 0.4);
请注意,因为 histc 第二个输入不是像 hist 这样的中心,而是每个 bin 的最终值。因此,您可能需要更改您的 y 向量。
【讨论】: