1

「データ」と呼ばれる行列をスライスする方法がわからない次の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 ループ内で、変数データはインデックス付けされていますが、スライスされていません。これにより、不要な通信オーバーヘッドが発生する可能性があります。

組み合わせ的に多くの再注文のためにこれを行う必要があります。だから私は絶望的にたくさんのことを試して多くの時間を費やしてきました..どんな助けや提案も素晴らしいでしょう.

ありがとうございました。

4

1 に答える 1

0

あなたはすでに問題を回避していると思います。ただし、完全を期すために問題があるのは、データのインデックス付けに使用するが、データをスライスできるようにneworderparfor ループ インデックスに関連付けられていないことです。ciこの失敗の最も近い原因は、それneworderがスカラーではなくベクトルであるということです。すぐに、matlab がデータをスライスできなくなります。ciそうでない場合でも、ループ インデックス ( ) を変数インデックス ( ) に関連付けることができない場合、matlab はデータをスライスできませんneworder

于 2012-10-17T21:18:42.867 に答える