2016-11-19 14 views
0

私はファイルからクロスバリデーションの折りたたみを読み込むことになっています(10反復、それぞれ10回、合計100で、1次元配列に順番に格納されます)。ファイルはhttps://www.mediafire.com/?bvs0n0eu7gs0if4です。問題は、私のコードは、集中的にループに使用していると私はそれをvectoriseしたいと思い、ここに私のコードです:私は、forループ2の外、ちょうど内側の1をvectoriseしたくないいくつかの理由からファイルからクロスバリデーションを読み込むために、このコードをどのようにベクトル化できますか?

input_filename = 'cv_yeast.mat'; 
cv = load(input_filename); 
nfolds= 10; 
niters = 10; 

for loop =1:niters 

     for i = 1 : nfolds  
      teIdx = cv.cv{((loop-1)*nfolds + i)};   
      trIdx = [];   
      for j = 1 : nfolds 
       if j ~= i     
        trIdx = [trIdx; cv.cv{(loop - 1)*nfolds + j}]; 
       end 
      end 
      % Processing goes here 
    end 
    end 

。誰もがどうもありがとうございました:)

+0

1は、外側のループをベクトル化することはできますか?特殊な外部ループレジスタはありますか? – Holmz

+0

私が取り組んでいる実際のコードは%処理のところにあるので、簡単にベクトル化できないと思われます。 –

+0

通常、簡単にベクター化するにはSoAレイアウトが必要です。概念的に。あなたはそれに何度も何度も取り組んでいれば、そのためのベクターを作ることができます。それ以外の場合は、ギャザーと散漫が必要です。だから基本的に1つだけのベクトルレジスタがあり、それは理想的には均一な線形データ上で動作するはずです...これはほぼ常に内側のループです。 trIDX []がそれをしようとしているようです。と@ rahnema1は、vertcatと。 – Holmz

答えて

1

をあなたがj秒のベクトルを作成し、垂直cvの要素を連結することができ、私を助けることができる:

for loop =1:niters 
    for i = 1 : nfolds  
     teIdx = cv.cv{((loop-1)*nfolds + i)};   
     J = [1:i-1, i+1:nfolds]; 
     trIdx = vertcat(cv.cv{(loop - 1)*nfolds + J}); 
    end 
end 
関連する問題