我无法确定在MatLab中转换到bin的概率。
我有两个长x,y坐标序列:
-73.9613487200000 -46.5918895000000
-74.3247836300000 -46.3739157100000
-74.1687114000000 -45.9507475300000
-74.0608490800000 -45.7491954000000
-74.1341642000000 -45.0915414400000
-73.8393784300000 -44.6707425700000
-73.8145227800000 -44.4084257500000
-74.5435599500000 -43.7561156500000
-74.2601082600000 -43.3275746200000
-74.5393861400000 -42.6844697600000
-74.1746965800000 -42.4732404300000
-73.8951934100000 -42.1678074600000
-73.7448163600000 -41.7981857300000
-73.4435398100000 -41.8730435200000
....
目标是确定从任何先前的箱中转换到箱(例如,x> 90 x <100&lt; y&gt; 90 y&lt; 100)的概率。为了清楚起见,我希望最终在每个10x10箱中创建一个概率值矩阵。
定义bin大小并对数据进行排序非常简单
xbins = -100:10:100;
ybins = -100:10:100;
xNumBins = numel(xbins); yNumBins = numel(ybins);
但主要是我可能遇到索引问题。
感谢您提供任何帮助/建议。
答案 0 :(得分:2)
首先,您需要将data
矩阵转换为分箱数据矩阵B
(或基本上只是将所有数据都存储起来)。你可以这样做:
bins = -100:10:100;
B = arrayfun(@(x)find(x<=bins,1,'first')-1,data);
现在您需要计算转换并创建网格。你可以简单地通过T = accumarray(B,1)
来做到这一点,但是为了理解这里是一个for循环:
n = numel(bins)-1;
T = zeros(n);
for k = 1:size(B,1)
T(B(k,1),B(k,2)) = T(B(k,1),B(k,2)) + 1;
end
然后从这种联合直方图转换为概率矩阵
T = T/sum(T(:))
示例:
a = rand(10,2)
a =
0.0534 0.1632
0.8664 0.4751
0.3270 0.6687
0.2016 0.4313
0.8158 0.6065
0.8493 0.4217
0.3997 0.3960
0.5845 0.1684
0.5499 0.3672
0.5886 0.4045
和
bins = 0:0.2:1;
做calc:
B = arrayfun(@(x)find(x<=bins,1,'first')-1,data);
T = accumarray(B,1,[numel(bins)-1, numel(bins)-1])/size(B,1);
T =
0.1000 0 0 0 0
0 0.1000 0.1000 0.1000 0
0.1000 0.1000 0.1000 0 0
0 0 0 0 0
0 0 0.2000 0.1000 0
这是正确的。例如,您可以看到20%的数据从bin 5转换到bin 3,并且对应于上面a
矩阵中的第2行和第6行。