在并行环境中保存到 matfile 时出现警告
Warning when saving to matfile in parallel environment
我正在尝试处理一个时间信号,它被分成(许多)更小的片段,每个片段 ("chunk") 都是独立分析的。这个输出,我想保存在一个组合文件中。
我当前的解决方案有效:
configFileName = 'config.mat';
config = matfile(configFileName,'Writable',true);
% some irrelevant stuff saved in config
config.chnk(1,N) = struct('var1',[],'var2',[],'var3',[]); % pre-allocating
clearvars config;
parfor i = 1:N
config = matfile(configFileName,'Writable',true);
chunk = process(data(:,i)); % data has previously been sliced
config.chnk(1,i) = chunk;
end
注意:process(data(:,i));
的输出与 config.chnk
的预分配类型相同。
现在,虽然这似乎有效(更新:无效),但我收到了 Matlab 的警告:
Warning: Unable to read some of the variables due to unknown MAT-file error.
In matlab.io.MatFile/genericWho (line 209)
In matlab.io.MatFile/whos (line 309)
In matlab.io.MatFile (line 422)
In matfile (line 75)
In parallel_function>make_general_channel/channel_general (line 929)
In remoteParallelFunction (line 38)
在我的例子中,我没有读取 parfor
中的任何内容,因此我可以在创建文件对象时使用 evalc
忽略脚本中的警告, 但是有谁知道为什么会出现这个警告,以及如何正确避免它?
更新:实际上,它不起作用。我正在写入的确切变量无效,每当我尝试从中读取时,我都会收到错误消息。
并行处理完成后,出现以下错误:
Error using matlab.io.MatFile/whos (line 311)
Could not open /Users/casparjespersen/ardetector/matlab/data/EMD/A0007_4/EEG.mat as a valid MAT-file.
Error in matlab.io.MatFile (line 422)
varInfo = whos(obj);
Error in matfile (line 75)
mf = matlab.io.MatFile(varargin{:});
Error in HHSA_BD_gen_emd (line 104)
parfor windowIdx = 1:size(windowChunks,2)
正如@user3528438 所指出的,这是由于工作人员同时写入文件。我选择重新设计脚本以避免从 parfor
.
内编写
我正在尝试处理一个时间信号,它被分成(许多)更小的片段,每个片段 ("chunk") 都是独立分析的。这个输出,我想保存在一个组合文件中。
我当前的解决方案有效:
configFileName = 'config.mat';
config = matfile(configFileName,'Writable',true);
% some irrelevant stuff saved in config
config.chnk(1,N) = struct('var1',[],'var2',[],'var3',[]); % pre-allocating
clearvars config;
parfor i = 1:N
config = matfile(configFileName,'Writable',true);
chunk = process(data(:,i)); % data has previously been sliced
config.chnk(1,i) = chunk;
end
注意:process(data(:,i));
的输出与 config.chnk
的预分配类型相同。
现在,虽然这似乎有效(更新:无效),但我收到了 Matlab 的警告:
Warning: Unable to read some of the variables due to unknown MAT-file error.
In matlab.io.MatFile/genericWho (line 209) In matlab.io.MatFile/whos (line 309) In matlab.io.MatFile (line 422) In matfile (line 75) In parallel_function>make_general_channel/channel_general (line 929) In remoteParallelFunction (line 38)
在我的例子中,我没有读取 parfor
中的任何内容,因此我可以在创建文件对象时使用 evalc
忽略脚本中的警告, 但是有谁知道为什么会出现这个警告,以及如何正确避免它?
更新:实际上,它不起作用。我正在写入的确切变量无效,每当我尝试从中读取时,我都会收到错误消息。
并行处理完成后,出现以下错误:
Error using matlab.io.MatFile/whos (line 311) Could not open /Users/casparjespersen/ardetector/matlab/data/EMD/A0007_4/EEG.mat as a valid MAT-file.
Error in matlab.io.MatFile (line 422) varInfo = whos(obj);
Error in matfile (line 75) mf = matlab.io.MatFile(varargin{:});
Error in HHSA_BD_gen_emd (line 104) parfor windowIdx = 1:size(windowChunks,2)
正如@user3528438 所指出的,这是由于工作人员同时写入文件。我选择重新设计脚本以避免从 parfor
.