0

私はこの問題を抱えていました...つまり、データ配列のグループ間で重要な値を見つけることでした。私の解決策は次のとおりです。

Data = [1.8,1.4, 1.5;
60, 70, 80;
20, 40, 5];

Error = [0.2, 0.1, 0.4;
20, 30, 10;
10,5,2];

    k = 1; 

for i = 1: size(Data,1)

    if ((Data(i,1)-Error(i,1)) > (Data(i,2)+Error(i,2)))

      selectedpar(k,1:3) = [i ,1, 2];

      k = k+1;
    end

    if ((Data(i,1)-Error(i,1)) > (Data(i,3)+Error(i,3)))

      selectedpar(k,1:3) = [i , 1, 3];

      k = k+1;
    end

    if ((Data(i,2)-Error(i,2)) > (Data(i,3)+Error(i,3)))

      selectedpar(k,1:3) = [i , 2, 3];

      k = k+1;
    end

end

selectedpar = [1    1   2
3   1   3
3   2   3]

ユーザーのおかげで、私はこの他の一般的な解決策にたどり着きました(一連のif条件を削除しました)

DM = Data-Error;
DP = Data+Error;
selectedpar = [];
for k=1:size(Data,1)
   [I,J]=find(tril(bsxfun(@gt, DM(k,:), DP(k,:).')));
   selectedpar = [selectedpar ; k+zeros(size(I)), J, I];  %#ok<AGROW>
end

ここで、別の条件を追加したいと思います。特に、チェックしたい場合は単一の代わりに

if ((Data(i,1)-Error(i,1)) > (Data(i,2)+Error(i,2)) || (Data(i,1)+Error(i,1)) < (Data(i,2)-Error(i,2))) etc...

だから私の醜い解決策は

    k = 1; 

for i = 1: size(Data,1)

    if ((Data(i,1)-Error(i,1)) > (Data(i,2)+Error(i,2)) || (Data(i,1)+Error(i,1)) < (Data(i,2)-Error(i,2)) )

      selectedpar(k,1:3) = [i ,1, 2];

      k = k+1;
    end

    if ((Data(i,1)-Error(i,1)) > (Data(i,3)+Error(i,3)) || (Data(i,1)+Error(i,1)) < (Data(i,3)-Error(i,3)))

      selectedpar(k,1:3) = [i , 1, 3];

      k = k+1;
    end

    if ((Data(i,2)-Error(i,2)) > (Data(i,3)+Error(i,3)) || (Data(i,2)+Error(i,2)) < (Data(i,3)-Error(i,3)))

      selectedpar(k,1:3) = [i , 2, 3];

      k = k+1;
    end

end

selectedpar = [1    1   2
3   1   2
3   1   3
3   2   3]

(正解)

bsxfun を変更して、新しい if 条件の 2 番目の部分 (OR の後の部分) を追加するにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

前の質問へのコメントで述べたように、 と を交換して ; に変更する別の行を追加するbsxfunだけです。次に、別の行で結果を収集します。DMDP@gt@ltselectedpar = ...

DM = Data-Error;
DP = Data+Error;
selectedpar = [];
for k=1:size(Data,1)
   [I,J]=find(tril(bsxfun(@gt, DM(k,:), DP(k,:).')));
   selectedpar = [selectedpar ; k+zeros(size(I)), J, I];  %#ok<AGROW>
   [I,J]=find(tril(bsxfun(@lt, DP(k,:), DM(k,:).'))); %%%NEW LINE
   selectedpar = [selectedpar ; k+zeros(size(I)), J, I];  %#ok<AGROW> %%%NEW LINE
end
于 2013-10-05T12:54:38.050 に答える