我的数据如下:
#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中?
谢谢!
答案 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
这个可能只是做你真正需要的......或者,再次,有点接近。尝试使用这些命令 - 将其视为“仅用于灵感”。