将数据从Text文件移动到MATLAB

时间:2013-04-15 04:17:35

标签: matlab

我的数据如下:

  

#input 1

     

0 1 1 0 0 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1

     

#output 1

     

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

     

#input 2

     

0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1

     

#output 2

     

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

数据位于文本文件中。大约有130个输入和输出向量。我基本上需要在MATLAB中加载数据来训练SVM模型。 有谁知道如何将数据加载到MATLAB中?

谢谢!

3 个答案:

答案 0 :(得分:1)

加载文本文件的较短方式:

%// Read lines from text file into cell array
fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'Delimiter', '', 'CommentStyle', '#');
fclose(fid);

%// Convert contents of each cell into a numerical array
C = cellfun(@str2num, reshape(C{1}, [], 2), 'UniformOutput', false);

结果是 N ×2单元阵列C(其中 N 是输入输出对的数量)包含您的数据。

对于您问题中的示例,C{1, 1}存储输入1×121的1和0数组,C{1, 2}包含相应的1×10输出数组[1.00 0 0 0 0 0 0 0 0 0]

答案 1 :(得分:0)

您可以以交互方式和编程方式将文本文件导入MATLAB。

要以交互方式导入数据,请使用导入工具。您可以生成代码以在多个类似文件上重复操作。导入工具支持文本文件,包括扩展名为.txt,.dat,.csv,.asc,.tab和.dlm的文本文件。这些文本文件可以是非矩形的,并且可以具有行和列标题。这些文件中的数据可以是数字和非数字文本的组合,可以用一个或多个字符分隔。

要以编程方式从文本文件导入数据,请使用导入功能。大多数文本文件的导入功能要求文件中的所有数据字段都是数字,并且每行数据具有相同的列数

MATLAB中有许多导入工具,如'load','textscan'等

答案 2 :(得分:0)

如果您知道不想从#开始的行,您可以使用textscan之类的简单选项:“当您到达此字符时停止阅读”。在这种情况下,一次读取一行

fid = fopen(myFile);
while(~feof(fid))
    myData = textscan(fid, '%[^#]d');
    if numel(myData) > 1
        thisRow = [myData{:}];
    end
end

我现在无法访问matlab,但上面应该非常接近......

我刚刚意识到,如果您的数据实际上是“矢量名称”和“矢量数据”,并且名称前面总是以“#”开头,​​那么您可以做得更好:

fid = fopen(myFile);
while(~feof(fid))
    myName = textscan(fid, '# %s %d');
    myData = textscan(fid, '%f', Inf);
    if numel(myData) > 1
        varName = sprintf('%s{%d}', myName{1}, myName{2});
        assignin('base', varName,myData); 
    end
end

这个可能只是做你真正需要的......或者,再次,有点接近。尝试使用这些命令 - 将其视为“仅用于灵感”。