我正在尝试将大约40个文件加载到MATLAB中,除了2个变量之外,所有人的姓名和位置都是相同的。它们每个包含5000个数据点,我想将它们组合成1个单向量。 它们是HDF5文件,因此我还必须指定文件中的路径,其名称也包含这些变量。
加载其中一个文件的示例是
ROdata = double(h5read('directories\010340text2\010340text2.hdf5','/othertext2'));
这里,变量将是010340和2.因此一般形式类似于(n和x项)
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左右的系列,所以这将是很多写作。
答案 0 :(得分:3)
这样的事情怎么样:
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位数。
答案 1 :(得分:1)
使用字符串连接怎么样?
ROdata = double(h5read(['directories\xtexty\' num2str(x) 'xtexty.hdf5'],['/othertexty' num2str(y)]));