3

我有一个如下所示的数据文件

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

但是,如果我们在每一行中有不同数量的浮点数,似乎我们不能直接将文件加载到矩阵中。有什么简单的方法可以做到这一点吗?

谢谢你。

4

2 回答 2

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
于 2013-01-04T14:28:41.307 回答
1

一个简单的方法是逐行读取文件

fid = fopen('data.txt');
arr = [];
tline = fgetl(fid);
while (tline ~= -1)
    temp = str2num(tline);
    arr = [arr temp(2:end)];
    tline = fgetl(fid);
end

您也可以尝试使用称重传感器功能,虽然我没有尝试过,所以我不确定它是否适合您。

于 2013-01-04T14:20:04.007 回答