我正在尝试将大约 40 个文件加载到 MATLAB 中,除了 2 个可变部分之外,所有文件的名称和位置都相同。它们每个都包含 5000 个数据点,我想将它们组合成 1 个向量。 它们是HDF5文件,所以我还必须指定文件内的路径,文件的名称也包含这些变量。
加载这些文件之一的示例是
ROdata = double(h5read('directories\010340text2\010340text2.hdf5','/othertext2'));
此处,变量为 010340 和 2。因此一般形式类似于(x 和 y 的 n 项)
ROdata = double(h5read('directories\xtexty\xtexty.hdf5','/othertexty'));
我的数组中的 x 和 y 都已加载到 MATLAB 中。
从这一点来说,我真的很无知。我想 num2str 出现在某个地方,但我尝试了一些方法(例如视频 http://blogs.mathworks.com/videos/2009/07/02/advanced-loading-files-using-their-names-for-variable-names/ ),但这不起作用,因为变量部分位于文本内部,而不是末尾。
我当然可以手动执行此操作,但这 40 个来自大约 300 个系列,因此需要编写大量内容。
最佳答案
像这样怎么样:
ROdata = double(h5read( ...
sprintf( 'directories/%06dtext%d/%06dtext%d.hdf5', 010340, 2, 010340, 2 ), ...
sprintf( '/othertext%d', 2 ) ));
%# or more general:
x = 010340;
y = 2;
ROdata = double(h5read( ...
sprintf( 'directories/%06dtext%d/%06dtext%d.hdf5', x, y, x, y ), ...
sprintf( '/othertext%d', y ) ));
%# or even more general:
%# assume X is your array containing elements x, Y for y elements
ROdata = cell{ numel(X), 1 };
for ii=1:numel(X)
ROdata{ii} = double(h5read( ...
sprintf( 'directories/%06dtext%d/%06dtext%d.hdf5', X(ii), Y(ii), X(ii), Y(ii) ), ...
sprintf( '/othertext%d', Y(ii) ) ));
end
看看 sprintf功能齐全,挺简洁的。
为了使其工作,您需要使用正斜杠,因为反斜杠充当转义字符。另一种可能性是使用 '\\'
,但 '/'
更具可读性并且也更有效。
由于 X
中的数字可能包含前导零:%06d
添加零填充,以便插入的数字始终为 6 位数字长。
关于string - 加载名称包含多个变量的文件 (MATLAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22939878/