Matlab R2015b 与 R2015a - table 在 parfor 循环中 - 违反透明度

Matlab R2015b vs R2015a - table in parfor loop - transparancy violation

我目前在 parfor 循环中创建 table 时遇到基本的透明度违规错误。最令人困惑的一点是,完全相同的示例代码在 R2015a 中有效,但在较新版本的 R2015b 中不再有效。

为了模拟问题,我 运行 在两个 Matlab 版本上使用了以下代码:

A = [1,2,3,4];

parfor i=1:5
  table(A)
end

这样做returns出现以下错误:

Error using table (line 247) Transparency violation error.
See Parallel Computing Toolbox documentation about Transparency

我现在很想知道是否有人遇到过同样的问题,或者是否有人可以对此提供解释。使用以前的版本,我的初始代码和这个简单的例子都非常有效。

不幸的是,这是因为 R2015b 中的工作区透明度检查变得更加严格,并且不允许使用 inputname,这是 table 构造函数正在使用的。我认为解决此问题的唯一方法是将 table 构造函数调用移动到从 parfor 循环内调用的函数中。即

parfor idx = 1:1
  t{idx} = iBuildTable(idx);
end

function t = iBuildTable(varargin)
  t = table(varargin{:});
end

注意:原始问题已在 MATLAB 的 R2019b 中修复,现已发布(2019-09-11 发布)。