【问题标题】:Matlab Nested parfor loop , variable cannot be classifiedMatlab嵌套parfor循环,变量无法分类
【发布时间】:2015-07-25 20:44:31
【问题描述】:

我正在尝试运行以下代码,但收到错误消息:

parfor中的变量R不能分类

有什么办法解决吗?

R=zeros(M,N,Us,Vs,'single');
parfor indM=1:M   
    for indN=1:N
        for indv=1:Vs           
           temp=squeeze(X(indM,indN,:,indv));          
           if(sum(temp(:)~=0))
             R(indM,indN,:,indv)= FractionalFFT_mid0(temp,a);    
           end
        end
    end
end

【问题讨论】:

  • @PavelOganesyan:我没有看到与该问题重复的问题,因为每个工作人员只访问 (indM,:,:,:) 切片。
  • @PavelOganesyan - 这不是正确的副本。 Daniel 的那个是正确的,我选择它作为最后的副本。
  • @rayryeng:我不认为其他问题是重复的。在这里,我们有一个非常简单的情况,即不沿最后一个维度进行切片,而其他骗子则涉及更复杂的问题。因此,我重新提出了这个问题。
  • @Jonas 明白了。谢谢

标签: matlab


【解决方案1】:

旧版本的 Matlab 要求 parfor-sliced 索引是最后一个(新版本,例如 2014b 不再有要求)。

R=zeros(N,Us,Vs,M,'single');
parfor indM=1:M   
    for indN=1:N
        for indv=1:Vs           
           temp=squeeze(X(indM,indN,:,indv));          
           if(sum(temp(:)~=0))
             R(indN,:,indv,indM)= FractionalFFT_mid0(temp,a);    
           end
        end
    end
end

%# get R back the way you wanted originally
R = permute(R,[4 1 2 3]);

【讨论】:

  • 我很感激,谢谢!
  • 嗯,我不认为曾经有过这样的要求 - 我刚刚尝试了 R2007b(第一个带有 parfor 的版本,主要是当前形式 - R2007a 和之前的版本版本有一个完全不同的parfor...),以及以下内容:x = zeros(4); parfor (idx = 1:4), x(idx,1) = 7, end 按我的预期工作。不过,在嵌套 FOR 循环方面支持的内容肯定有一些变化。
  • 话虽如此,我不知道为什么重新排序下标会起作用。
  • @Edric:OP 的示例在 R2014b 中对我来说确实有效(使用一些随机数据),但在过去,索引变量的重新排序有所帮助。我不记得我在文档中的什么地方看到的,或者我是否通过反复试验找到了它; parfor 有时确实有点不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多