【问题标题】:Transparency Error when using table in parfor loop在 parfor 循环中使用表时出现透明度错误
【发布时间】:2018-05-08 22:13:30
【问题描述】:
我正在尝试在 MATLAB 的 parfor 循环中使用表。这给了我“透明度违规错误。请参阅有关透明度的并行计算工具箱”我正在尝试构建此表,以便我可以使用来自 MATLAB 分类学习器应用程序 (trainedClassifier.prefictFcn(T)) 的经过训练的分类器进行预测......所以要么我需要在parfor 循环中构建一个表,或者需要一些我仍然可以输入分类器的表的替代方法。
parfor i=1:100
acheck=1;
bcheck=2;
ccheck=3;
T=table(acheck,bcheck,ccheck);
end
【问题讨论】:
标签:
matlab
for-loop
parfor
【解决方案1】:
此解决方案适用于您的特定问题:
parfor i=1:100
acheck=1;
bcheck=2;
ccheck=3;
T(i,:)=table([acheck,bcheck,ccheck]);
end
请注意,在您的原始程序中,您只需覆盖现有值并最终得到一个单行表。我认为那不是故意的。实际上,这将是一个 for 的结果。
此外,由于这是一个 parfor 并且 T 是在循环内创建的(以及 acheck 等),因此仅使用 T 根本不会创建任何内容。该变量是一个临时变量,对每个进程本地可见并在全局范围内销毁(更多可以找到here)。
为了修复覆盖和可访问性,程序将每组变量分配给 T 的每一行。如果省略方括号,程序将引发透明度错误。不幸的是,我不知道为什么会这样,但可能是表数据结构完成的操作导致了这种情况。也许其他人会知道答案,不过现在这似乎解决了你的问题。