将数据块读入matlab数组

时间:2013-01-04 13:32:23

标签: matlab

我的数据文件如下所示

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(:) ; 

但是,如果每行中有不同数量的浮点数,似乎我们无法将文件直接加载到矩阵中。有没有简单的方法来实现这个目标?

谢谢。

2 个答案:

答案 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功能,虽然我没有尝试过,所以我不肯定它会对你有用。

相关问题