如何在matlab parfor循环中切割此矩阵?

时间:2012-08-15 01:11:54

标签: parallel-processing matlab

我有一个以下的matlab代码,我无法弄清楚如何切割称为“数据”的矩阵。

简而言之,代码的作用是:

在每次迭代时,创建一个名为“newOrder”的重新排序 用重新排序的向量“y”调用函数“train”并重新排序矩阵“data”。 这里,“重新排序”使用所有元素而不是它们的子集。循环运行速度至关重要,所以我担心这个警告。

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循环中,变量数据被索引但没有被切片。这可能会导致不必要的通信开销。

我需要为组合的许多重新排序做这件事。 所以我花了很多时间无可救药地尝试一堆东西.. 任何帮助或建议都会很棒。

谢谢。

1 个答案:

答案 0 :(得分:0)

我假设你已经解决了这个问题;但是,为了完整性,问题是用于索引数据的neworder与允许切片数据的方式与parfor循环索引ci无关。导致此失败的原因是neworder是向量而不是标量。马上阻止matlab切片数据。即使不是这种情况,当matlab无法将循环索引(ci)与变量索引(neworder)相关联时,matlab也无法对数据进行切片。