「データ」と呼ばれる行列をスライスする方法がわからない次のmatlabコードがあります。
簡単に言うと、コードは次のようになります。
各反復で、「newOrder」と呼ばれる並べ替えを作成し、並べ替えられたベクトル「y」と並べ替えられた行列「データ」を使用して関数「train」を呼び出します。ここで、「並べ替え」は、それらのサブセットではなくすべての要素を使用します。ループが高速に実行されることが重要であるため、この警告が気になります。
w = []; data = sparse(double(X(:,selTrain)));
parfor ci = 1:length(classes)
y = 2*(imageClass(selTrain)==ci)'-1;
newOrder = [find(y==1); find(y==-1)];
this_svm = train(y(newOrder), data(:, newOrder), ' -s 3 -B 1 -c 10 -q', 'col');
w(:,ci) = this_svm.w';
end
エラーは表示されませんが、警告は表示されます。parfor ループ内で、変数データはインデックス付けされていますが、スライスされていません。これにより、不要な通信オーバーヘッドが発生する可能性があります。
組み合わせ的に多くの再注文のためにこれを行う必要があります。だから私は絶望的にたくさんのことを試して多くの時間を費やしてきました..どんな助けや提案も素晴らしいでしょう.
ありがとうございました。