我有一个来自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);
答案 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
”是文件的列数。