【问题标题】:How would I slice this matrix in matlab parfor loop?我将如何在 matlab parfor 循环中对该矩阵进行切片?
【发布时间】:2012-08-15 01:11:54
【问题描述】:

我有以下 matlab 代码,我不知道如何对称为“数据”的矩阵进行切片。

简单来说,代码的作用是:

在每次迭代中,创建一个名为“newOrder”的重新排序,然后 使用重新排序的向量“y”和重新排序的矩阵“data”调用函数“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 循环中,变量数据已被索引但未切片。这可能会导致不必要的通信开销。

我需要为组合的许多重新排序执行此操作。 所以我花了很多时间绝望地尝试一堆东西.. 任何帮助或建议都会很棒。

谢谢。

【问题讨论】:

  • 您是否要并行计算data 矩阵的所有阶以同时运行多个SVM train?这对我来说并不完全清楚。你能告诉我更多细节吗?
  • 不是所有的数据顺序。对于每个类,我想重新排序数据矩阵并调用 train 函数。
  • 您遇到的具体错误是什么?您能否将其添加到您的问题中?

标签: parallel-processing matlab


【解决方案1】:

我假设您已经解决了这个问题;但是,为了完整起见,问题在于您用于索引数据的neworder 与 parfor 循环索引ci 的关系不在于允许对数据进行切片。此失败的直接原因是neworder 是一个向量而不是一个标量。立即阻止 matlab 对数据进行切片。即使不是这种情况,当 matlab 无法将循环索引 (ci) 与变量索引 (neworder) 关联时,它也无法对数据进行切片。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2015-10-15
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多