0

我的数据如下所示:

# 输入 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

# 输出 1

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

# 输入 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

# 输出 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 中吗?

谢谢!

4

3 回答 3

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 和 0 组成的 1×121 输入数组,并C{1, 2}包含相应的 1×10 输出数组[1.00 0 0 0 0 0 0 0 0 0]

于 2013-04-15T10:05:09.670 回答
0

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

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

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

MATLAB 中有很多导入工具,例如“load”、“textscan”等

于 2013-04-15T04:24:10.507 回答
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

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

于 2013-04-15T05:31:42.920 回答