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