【问题标题】:Reading a text file with multiple delimiters and matrices of different lengths读取具有多个分隔符和不同长度矩阵的文本文件
【发布时间】:2013-10-24 22:20:20
【问题描述】:

我正在尝试读取包含多个不同(但已知)大小的数组的文本文件。

我对这些文件有以下了解:

每个文件都有一个大小为 m x n 的矩阵,格式如下例所示:

[[0.05,0.15,0.25,0.35,0.0]
[0.05,0.1,0.15,0.2,0.25],
[0.05,0.1,0.15,0.2,0.25],
[0.05,0.1,0.5,0.6,0.1]]

后面是一个大小为 p x 1 的矩阵:

[3,3,4,5,5,5,5,6]

最后是一个标量(这里没有方括号)

3

我发现的最简单的方法如下:

  1. 从文本文件中去掉括号(使用比 MATLAB 更合适的语言!)
  2. 使用data = importdata() 读取文件。这会产生一个数组,最后两行包含 p x 1 矩阵和标量(由于矩阵大小之间的差异,有一些 NaN)
  3. 拉出数据,A = data(1:m, 1:n); b = data(m+1,1:p); c = data(m+2,1);

这看起来很笨重。我可以将二维矩阵(包括括号)复制并粘贴到 MATLAB 命令窗口中,并且 MATLAB 知道如何解析它。这让我觉得有一种更优雅的方法可以用一个 MATLAB 函数来做到这一点。

整个示例文本文件:

[[0.05,0.15,0.25,0.35,0.0],
[0.05,0.1,0.15,0.2,0.25],
[0.05,0.1,0.15,0.2,0.25],
[0.05,0.1,0.5,0.6,0.1]]
[3,3,4,5,5,5,5,6]
3

【问题讨论】:

  • 你的第一行有 4 个元素;接下来的三个有五个。我在本地示例的第一行添加了 0.0。
  • 您正在使用哪种“比 MATLAB 更合适的语言(用于文本处理)”?是否支持 MEX?
  • FWIW,要从 Matlab 中的字符串中去除 [、],可以使用:regexprep(str,'[\[\]]','')。另见strrep。

标签: matlab text text-files


【解决方案1】:

如果您愿意将此文件的内容传递给eval 命令,这似乎是最直接的方法:

 %Read in the full file as a string  (this is often easier than handling the file directly)
fid = fopen('somefile.txt');
str = fread(fid,inf,'uint8=>char')';
fclose(fid);

str = ['{' str '}'];  %Add braces, this will gather the arrays when evaluated.
data = eval(str);     %Evaluate

这让我的 something-must-be-wrong 感觉有点痒,因为它是一种非常脆弱的数据处理方式。但它对于有限的数据集应该足够好。

我的samefile.txt 文件包含以下内容(注意我在第一行添加了一个 0):

[[0.05,0.15,0.25,0.35,0],
[0.05,0.1,0.15,0.2,0.25],
[0.05,0.1,0.15,0.2,0.25],
[0.05,0.1,0.5,0.6,0.1]]
[3,3,4,5,5,5,5,6]
3

上面运行后,我有一个data变量,内容如下:

>> data{1}
ans =
       0.05                      0.15                      0.25                      0.35                         0
       0.05                       0.1                      0.15                       0.2                      0.25
       0.05                       0.1                      0.15                       0.2                      0.25
       0.05                       0.1                       0.5                       0.6                       0.1    
>> data{2}
ans =
   3     3     4     5     5     5     5     6
>> data{3}
ans =
   3

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多