我正在使用Matlab,很容易找到矩阵中元素的概率,但我有点不确定如何在行或列中找到元素的概率。
例如这个矩阵:
X = [
1 2 4 1 8;
5 3 6 9 2;
6 2 2 3 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;
您可以调整它以按行或其他维度计算“概率”,或查找其他值。