我的数据文件如下所示
3 1.0 1.4 1.7
2 1.2 1.5
1 1.1
2 1.1 1.2
对于每一行,第一个整数表示该行中的浮点数。
现在我想将所有数据加载到一个matlab数组中,并忽略第一列,也就是说,我想得到一个像这样的数组
>>arr = [1.0, 1.4, 1.7, 1.2, 1.5, 1.1, 1.1, 1.2]
如果对于每一行,我们有相同数量的浮点数,我可以像这样做
>>arr = load datafile ;
>>arr = arr(:,2:end) ; %ignore the first column
>>arr = arr(:) ;
但是,如果每行中有不同数量的浮点数,似乎我们无法将文件直接加载到矩阵中。有没有简单的方法来实现这个目标?
谢谢。
答案 0 :(得分:4)
首先,让我们将数字读作字符串:
C = textread('myfile.txt', '%s', 'delimiter', '\n');
结果是字符串的单元格数组,所以让我们在每个单元格上应用str2num
来获取数值:
C = cellfun(@str2num, C, 'Uniform', false);
现在让我们丢弃每个单元格中的第一个元素:
C = cellfun(@(x)x(2:end), C, 'Uniform', false);
最后,我们将所有值连接成一个向量:
arr = [C{:}]
这是完整的代码:
C = textread('test.txt', '%s', 'delimiter', '\n'); %// Read data
C = cellfun(@str2num, C, 'Uniform', false); %// Convert to numbers
C = cellfun(@(x)x(2:end), C, 'Uniform', false); %// Remove first values
arr = [C{:}]
arr =
1.0000 1.4000 1.7000 1.2000 1.5000 1.1000 1.1000 1.2000
答案 1 :(得分:1)
执行此操作的简单方法是逐行读取文件
fid = fopen('data.txt');
arr = [];
tline = fgetl(fid);
while (tline ~= -1)
temp = str2num(tline);
arr = [arr temp(2:end)];
tline = fgetl(fid);
end
你也可以尝试使用loadcell功能,虽然我没有尝试过,所以我不肯定它会对你有用。