100個のモデル(行列)があり、各行列のサイズは4X3です。4つの変数R_L
、、、およびN_g
のそれぞれのサイズは4x3x100です。ここで、4X3は各行列のサイズであり、そのような行列は100個あります。私が何を意味するのかを理解するために、2つの変数のスナップショットを添付しました。N_Pc
uT
R_L
最初の3つの変数(つまり、、、 )の行列1をループしN_g
、N_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
対処したい次の懸念事項があります。
ismember
値が完全に一致する場合にのみ役立ちます。正確に類似した値がない場合、値が含まれる特定の間隔を指定したい場合は、等しいと見なす必要があります。3つの変数すべてが等しいグリッド(要素)を見つけたいので、この関数
intersect
はここでは機能しません(上記のコードで使用した場合でも)。intersect
複数の変数で同様の機能を実行できる代わりに、何を使用することをお勧めしますか。
ありがとう。