我正在尝试读取包含多个不同(但已知)大小的数组的文本文件。
我知道以下有关文件:
每个文件都有一个大小为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
我发现这样做的最简单方法如下:
data = importdata()
读取文件。这导致一个数组,最后两行包含p x 1矩阵和标量(由于矩阵大小之间的差异,有一些NaN)A = data(1:m, 1:n); b = data(m+1,1:p); c = data(m+2,1);
这看起来很笨重。我可以将2维矩阵(包括括号)复制并粘贴到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
答案 0 :(得分:3)
如果您愿意将此文件的内容传递给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
这会让我的某些东西 - 必须是错误的感觉发痒,因为这是处理数据的一种非常脆弱的方式。但它对于有限的数据集应该足够好。
我的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