MATLAB - 需要从文本列文件中创建单元格数组

时间:2015-05-10 20:45:55

标签: matlab machine-learning text-files

我有一个来自UCI机器学习的数据库(Abalone Database),我需要将第一列(character)与其他列double分开。< / p>

我已经使用此代码的第二部分:

abaloneData = csvread('abalone.data',0,1);

我尝试了很多东西来收集第一部分用于KNN,但我每次都失败了。

感谢。

EDIT1:

read_data.m

function [features, labels] = read_data()
    features = csvread('abalone.data',0,1);

    fileID = fopen('abalone.data');
    data = textscan(fileID,'%s %*[^\n]', 'Delimiter',',');
    fclose(fileID);
    labels = cell2mat(data{1});
end

knn.m

[features,labels] = read_data();

Mdl = fitcknn(features,labels);

2 个答案:

答案 0 :(得分:1)

问题,正如您现在可能已经意识到的那样,csvread()仅适用于数值。相反,您需要使用textscan()来处理字符串/字符。试试这个:

fileID = fopen('abalone.data');
data = textscan(fileID,'%s %*[^\n]', 'Delimiter',',');
fclose(fileID);
labels = cell2mat(data{1});

这将打开文件并以字符串形式读入第一列,跳过每行中的其余元素。最后,这些数据从单元格转换为名为labels

的字符向量

答案 1 :(得分:0)

如果每行的列数相同,则可以尝试使用textscan

fp=fopen('f.txt','rt')
a=textscan(fp,'%c%f%f%f%f%f%f%f%f','delimiter',',')
fclose(fp)

cellarray包含存储在文件中的数据。

其大小应为(1xn),其中“n”是文件的列数。