2017-10-22 13 views
0

すべての列が互いに独立している行列があります。つまり、各列の最小値は0で、最大値は1です。これは確率です。ただし、各列には1のみが含まれている必要はありません。これは、私が1で構成されている各列のインデックスを見つけようとすると、私にとって問題を引き起こします。インデックスは、別の行列の値を抽出するために使用されます。それに2つの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=[1; (6+8)/2; (9+11+12)/3]; %3x1 matrix 

になりextracted_posを期待していることが、私は私の問題を説明するための他の方法を考えることはできませんここに。これはできますか?それともこれを行うための他の方法がありますか?前もって感謝します!当然の

答えて

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 5月には、浮動小数点数が含まれている - それは、あなたは天才だ彼らに

+0

をどのように処理するかはあなた次第です!どうもありがとうございます! –

+2

'nanmean'は統計とMLのツールボックスからのものです。代わりに '' omitnan''で 'mean'を使用してください –

関連する問題