0

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

例如这个矩阵:

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

我如何找到这个随机矩阵的每一行和每一列中出现“2”的概率。

4

2 回答 2

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
于 2013-04-13T09:23:18.423 回答
1

这是一个简单的、不太像 Matlab 的解决方案,它适用于非空二维矩阵,查找值为“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;

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

于 2013-04-13T09:25:46.277 回答