string - 加载名称包含多个变量的文件 (MATLAB)

标签 string matlab numbers

我正在尝试将大约 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/

相关文章:

python - 转换日期时间字符串的最有效方法(2016年7月25日11 :51:32 PM) into another string (YYYYMMDD) in python

java - 将子字符串替换为 StringBuffer 子字符串

matlab - 逻辑回归的实现

java - 如何将 Collection<Number> 转换为 Collection<Integer> 安全?

c# - 数学函数消除负号

java - 仅使用货币 Java 从文本中获取数字

c - 如何在C中的二维数组中输入一个字符串?

ios - 获取键的方法 JSON 响应(字符串)编码投诉

matlab - 重载! (爆炸)运算符(operator)

C++ 线性代数库 Armadillo : how to use eig_pair to get the same result as eig function in Matlab?