我有一个矩阵,每列都是相互独立的。也就是说,每列的最小值为0
,最大值为1
,这是一个概率。但是,每列只需包含一个1
。当我尝试查找包含1
的每列的索引时,这会给我带来问题。索引将用于提取另一个矩阵的值,比如位置矩阵。如果它包含两个1
,则应对值进行平均。示例代码:
prob=[rand(4,1) rand(4,1) rand(4,1)];
max_prob_idx=find(prob==1);
%extract from position matrix
pos=rand(4,3);
extracted_pos=pos(max_prob_idx); %this is wrong, look example below
从上面的代码中,我将获得extracted_pos
的列向量。这搞砸了我的数据提取。数值:
prob=[1 0 1
0.1 1 0.8
0.2 0.5 1
0.3 1 1]
max_prob_idx=[1; 6; 8; 9; 11; 12];
pos=[1 5 9
2 6 10
3 7 11
4 8 12]
extracted_pos=[1; 6; 8; 9; 11; 12]; %6x1 matrix
我错过了介于两者之间的内容,以便我的最终期望extracted_pos
extracted_pos=[1; (6+8)/2; (9+11+12)/3]; %3x1 matrix
我知道这看起来很乱,但我想不出任何其他方式来解释我的问题。可以这样做吗?或者还有其他方法可以做到这一点?提前谢谢!
答案 0 :(得分:3)
% generate position matrix
pos = reshape(1:numel(prob),size(prob)); % technically the reshape is not necessary, a vector 1:numel(prob) would do it too, but I find it nicer.
% empty NaN matrix
P = nan(size(prob));
% extract 1 values
P(prob==1) = pos(prob==1); % with real data you might have to make a check with tolerance
% mean of each column
extracted_pos = mean(P,1,'omitnan');
extracted_pos
当然可以包含浮点数 - 这取决于你如何处理它们