我在parfor循环中创建表时遇到基本的透明度违规错误。最令人困惑的是,完全相同的示例代码在R2015a中起作用,但在较新版本R2015b中不再起作用。
为了模拟问题,我在两个Matlab版本上运行以下代码:
A = [1,2,3,4];
parfor i=1:5
table(A)
end
这样做会返回以下错误:
使用表时出错(第247行)透明度违规错误 看到 有关透明度的并行计算工具箱文档
我现在很想知道是否有人遇到过同样的问题,或者是否有人可以为此提供解释。使用以前的版本我的初始代码和这个简单的例子就像一个魅力。
答案 0 :(得分:3)
不幸的是,这是因为R2015b中的工作区透明度检查变得更加严格,并且不允许使用inputname
,这是table
构造函数正在使用的内容。我认为解决这个问题的唯一方法是将table
构造函数调用移动到从parfor
循环中调用的函数中。即。
parfor idx = 1:1
t{idx} = iBuildTable(idx);
end
function t = iBuildTable(varargin)
t = table(varargin{:});
end