我正在尝试处理一个时间信号,它被分成(很多)较小的段,并且每个段(" 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的警告:
警告:由于未知的MAT文件错误,无法读取某些变量。
在matlab.io.MatFile / genericWho(第209行) 在matlab.io.MatFile / whos中(第309行) 在matlab.io.MatFile中(第422行) 在matfile中(第75行) 在parallel_function> make_general_channel / channel_general(第929行) 在remoteParallelFunction(第38行)
就我而言,我没有阅读parfor
内的任何内容,因此我可以在创建文件对象时使用evalc
省略脚本中的警告,但有人知道为什么这样做出现警告,以及如何正确避免?
更新 :实际上它不起作用。我写的确切变量是无效的,每当我尝试读取它时,我都会收到错误。
并行过程完成后,我收到以下错误:
使用matlab.io.MatFile / whos时出错(第311行) 无法打开/Users/casparjespersen/ardetector/matlab/data/EMD/A0007_4/EEG.mat作为有效的MAT文件。
matlab.io.MatFile中的错误(第422行) varInfo = whos(obj);
matfile中的错误(第75行) mf = matlab.io.MatFile(varargin {:});
HHSA_BD_gen_emd出错(第104行) parfor windowIdx = 1:size(windowChunks,2)
答案 0 :(得分:1)
正如@ user3528438所指出的,这是由于工作人员同时写入文件。我选择重新设计我的脚本以避免在parfor
内写作。