矩阵中出现的数字的概率

时间:2013-04-13 08:34:13

标签: matlab matrix row probability

我正在使用Matlab,很容易找到矩阵中元素的概率,但我有点不确定如何在行或列中找到元素的概率。

例如这个矩阵:

X = [
    1 2 4 1 8; 
    5 3 6 9 2; 
    6 2 2 3 2
    ];

如何在此随机矩阵的每一行和每列中找到“2”的概率。

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

X_unique = unique(X);
p_row = zeros(size(X,1),numel(X_unique));
p_col = zeros(size(X,2),numel(X_unique));

for ii = 1:size(X,1)
    p_row(ii,:) = hist(X(ii,:),X_unique);
    p_row(ii,:) = p_row(ii,:)/sum(p_row(ii,:));
end

for ii = 1:size(X,2)
    p_col(ii,:) = hist(X(:,ii),X_unique);
    p_col(ii,:) = p_col(ii,:)/sum(p_col(ii,:));
end

现在,p_row的每一行都包含unique(X)相应行中X元素的概率分布,p_col的每一行包含概率分布unique(X)的相应列中X的元素。

例如,对于给定的示例,

X_unique =

     1
     2
     3
     4
     5
     6
     8
     9

因此,

p_row =

    0.4000    0.2000         0    0.2000         0         0    0.2000         0
         0    0.2000    0.2000         0    0.2000    0.2000         0    0.2000
         0    0.6000    0.2000         0         0    0.2000         0         0

p_col =

    0.3333         0         0         0    0.3333    0.3333         0         0
         0    0.6667    0.3333         0         0         0         0         0
         0    0.3333         0    0.3333         0    0.3333         0         0
    0.3333         0    0.3333         0         0         0         0    0.3333
         0    0.6667         0         0         0         0    0.3333         0

答案 1 :(得分:1)

这是一个简单的,不太完全的Matlab-ish解决方案,适用于非空的二维矩阵,寻找值为“2”的元素,并按列返回概率:

a = [1 2 4 1 8; 5 3 6 9 2; 6 2 2 3 2];

nrows = size(a,1);
ncols = size(a,2);
pc    = zeros(1, ncols); % Prob. by column

% Iterate trough columns
for k = 1:ncols
        n     = sum(a(:,k) == 2);
        pc(k) = n/nrows;
end;

您可以调整它以按行或其他维度计算“概率”,或查找其他值。