如何计算Matlab中一个bin的转移概率

时间:2014-03-18 04:49:08

标签: matlab probability

我无法确定在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);

但主要是我可能遇到索引问题。

感谢您提供任何帮助/建议。

1 个答案:

答案 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行。

相关问题