1

100個のモデル(行列)があり、各行列のサイズは4X3です。4つの変数R_L、、、およびN_gのそれぞれのサイズは4x3x100です。ここで、4X3は各行列のサイズであり、そのような行列は100個あります。私が何を意味するのかを理解するために、2つの変数のスナップショットを添付しました。N_PcuT

ここに画像の説明を入力してください

R_L最初の3つの変数(つまり、、、 )の行列1をループしN_gN_Pcこれらの変数の行列1の各要素を他の99個の行列の要素と比較しています。これらの99個の行列の3つの変数すべてが、行列1の任意の要素の対応する3つの変数と等しい要素を見つけたいと思います。

たとえば、マトリックス1の要素(1,1)の3つの変数すべてが、マトリックス2の要素(2,2)、マトリックス3の(2,1)、マトリックス3の(2,4)で対応する類似の値を持っている場合などです。次に、uT上記のすべての要素位置、つまりマトリックス1の(1,1)、マトリックス2の(2,2)、マトリックス3の(2,1)、(2、 4)マトリックス3などから、それらの結果をヒストグラムをプロットするためにuT呼び出される新しい変数に格納します。store_result以下のコードに示されています。

nModel=100;
ixk=1;
% looping inside model # 1
for k_model1=size(R_L,1):-1:1
    for i_model1=1:size(R_L,2)

        % comparing values in model 1 to values in model 2 to nModel
        for model_no=2:nModel
            % looping inside each model from model # 2 to nModel
            for k=size(R_L,1):-1:1
                for i=1:size(R_L,2)
                    if ismember(R_L(k_model1,i_model1,1), R_L(k,i,model_no)) &&...
                            ismember(N_g(k_model1,i_model1,1), N_g(k,i,model_no)) &&...
                            ismember(N_Pc(k_model1,i_model1,1), N_Pc(k,i,model_no))
                        index_for_identical_results(:,:,model_no)=intersect(ismember(R_L(k_model1,i_model1,1), R_L(k,i,model_no)),...
                            ismember(N_g(k_model1,i_model1,1), N_g(k,i,model_no)),...
                            ismember(N_Pc(k_model1,i_model1,1), N_Pc(k,i,model_no)));

                    end
                end
            end
        end
        store_result(:,ixk)=uT(index_for_identical_results(:,:,model_no));
        ixk=ixk+1;
    end
end

対処したい次の懸念事項があります。

  1. ismember値が完全に一致する場合にのみ役立ちます。正確に類似した値がない場合、値が含まれる特定の間隔を指定したい場合は、等しいと見なす必要があります。

  2. 3つの変数すべてが等しいグリッド(要素)を見つけたいので、この関数intersectはここでは機能しません(上記のコードで使用した場合でも)。intersect複数の変数で同様の機能を実行できる代わりに、何を使用することをお勧めしますか。

ありがとう。

4

1 に答える 1

1

私は次のように問題を解決することができました:

error=0.1;
ixk=1;
% looping inside model # 1
for k_model1=size(R_L,1):-1:1
    for i_model1=1:size(R_L,2)
        count=1;

        % comparing values in model 1 to values in model 2 to nModel
        for model_no=2:nModel
            % looping inside each model from model # 2 to nModel
            for k=size(R_L,1):-1:1
                for i=1:size(R_L,2)
                    if abs((R_L(k_model1,i_model1,1)-R_L(k,i,model_no))/R_L(k_model1,i_model1,1))<=error...
                            && abs((N_g(k_model1,i_model1,1)-N_g(k,i,model_no))/N_g(k_model1,i_model1,1))<=error &&...
                            abs((N_Pc(k_model1,i_model1,1)-N_Pc(k,i,model_no))/N_Pc(k_model1,i_model1,1))<=error
                        %                         index_for_identical_results(:,:,model_no)=
                        if count==1 && ixk==1
                            store_result(1:2,ixk)=vertcat(uT_mpersec_end_of_window(k_model1,i_model1,1),uT_mpersec_end_of_window(k,i,model_no));
                            count=count+2;
                        elseif count==1 && ixk~=1
                            store_result(1:2,ixk)=vertcat(uT_mpersec_end_of_window(k_model1,i_model1,1),uT_mpersec_end_of_window(k,i,model_no));
                            count=count+2;
                        else
                            store_result(count,ixk)=uT_mpersec_end_of_window(k,i,model_no);
                            count=count+1;
                        end
                    end
                end
            end
        end
        ixk=ixk+1;
    end
end
于 2012-02-09T05:49:02.907 に答える