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)Xp_colunique(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

これは、空でない二次元行列で機能し、値が「2」の要素を探し、列ごとに確率を返す単純な、まったくMatlabのようなソリューションではありません。

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 に答える