ввод должен быть пустым или строкой формата

Привет, я продолжаю получать ошибку с этим:

%% generate sample data
K = 3;
numObservarations = 12000;
dimensions = 20;
data = fopen('M.dat','rt');
C = textscan(data,[numObservarations dimensions]);

??? Ошибка при использовании ==> textscan Второй ввод должен быть пустым или строкой формата.

Я пробовал этот метод:

%% format data
%# read the list of features
fid = fopen('kddcup.names','rt');
C = textscan(fid, '%s %s', 'Delimiter',':', 'HeaderLines',1);
fclose(fid);

%# determine type of features
C{2} = regexprep(C{2}, '.$','');              %# remove "." at the end
attribNom = [ismember(C{2},'symbolic');true]; %# nominal features

%# build format string used to read/parse the actual data
frmt = cell(1,numel(C{1}));
frmt( ismember(C{2},'continuous') ) = {'%f'}; %# numeric features: read as number
frmt( ismember(C{2},'symbolic') ) = {'%s'};   %# nominal features: read as string
frmt = [frmt{:}];
frmt = [frmt '%s'];                           %# add the class attribute

%# read dataset
fid = fopen('kddcup.data_10_percent_corrected','rt');
C = textscan(fid, frmt, 'Delimiter',',');
fclose(fid);

%# convert nominal attributes to numeric
ind = find(attribNom);
G = cell(numel(ind),1);
for i=1:numel(ind)
    [C{ind(i)},G{i}] = grp2idx( C{ind(i)} );
end

%# all numeric dataset
M = cell2mat(C);
data = M;

%% generate sample data
K = 3;
numObservarations = 12000;
dimensions = 20;
data = textscan([numObservarations dimensions]);

%% cluster
opts = statset('MaxIter', 500, 'Display', 'iter');
[clustIDX, clusters, interClustSum, Dist] = kmeans(data, K, 'options',opts, ...
'distance','sqEuclidean', 'EmptyAction','singleton', 'replicates',3);

%% plot data+clusters
figure, hold on
scatter3(data(:,1),data(:,2),data(:,3), 50, clustIDX, 'filled')
scatter3(clusters(:,1),clusters(:,2),clusters(:,3), 200, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y'), zlabel('z')

%% plot clusters quality
figure
[silh,h] = silhouette(data, clustIDX);
avrgScore = mean(silh);
%% Assign data to clusters
% calculate distance (squared) of all instances to each cluster centroid
D = zeros(numObservarations, K);     % init distances
for k=1:K
%d = sum((x-y).^2).^0.5
D(:,k) = sum( ((data - repmat(clusters(k,:),numObservarations,1)).^2), 2);
end

% find  for all instances the cluster closet to it
[minDists, clusterIndices] = min(D, [], 2);
% compare it with what you expect it to be
sum(clusterIndices == clustIDX)

но получить ошибку:

??? Error using ==> textscan
Invalid file identifier.  Use fopen to
generate a valid file identifier.

Error in ==> kmeans at 37
data = textscan([numObservarations
dimensions]);

person G Gr    schedule 12.10.2011    source источник
comment
Вы смотрели документацию для textscan? Он говорит вам, что вторым входом должна быть строка спецификаторов преобразования. Просто посмотрите примеры в документации.   -  person Ghaul    schedule 12.10.2011
comment
я опубликую полный код, который у меня есть   -  person G Gr    schedule 12.10.2011
comment
Ваши первые два использования textscan в порядке - вам просто нужно смоделировать третий после них... или вы получили начало своего кода откуда-то/кто-то еще?   -  person Jonas Heidelberg    schedule 12.10.2011
comment
Привет, Джонас, да, я просто пытаюсь узнать, как работает Matlab и как работает кластеризация, метод основан на предыдущих вопросах и складывает собственную историю на k-means. Просто пока не знаю, как совместить эти два метода.   -  person G Gr    schedule 14.10.2011
comment
Я вижу, что вы пытались объединить код из этих двух решения, но почему вы заменили RAND на TEXTSCAN? Эта часть должна была генерировать образцы данных, которые в вашем случае действительно не нужны, так как вы прочитали фактические данные из файла...   -  person Amro    schedule 14.10.2011
comment
привет amro вот что я пытался решить? Я не мог прочитать данные.   -  person G Gr    schedule 14.10.2011


Ответы (1)


Ваш вызов textscan не соответствует требуемому синтаксису. Допустимы следующие подписи:

C = textscan(fid, 'format')
C = textscan(fid, 'format', N)
C = textscan(fid, 'format', 'param', value)
C = textscan(fid, 'format', N, 'param', value)
C = textscan(str, ...)
[C, position] = textscan(...)
person zellus    schedule 12.10.2011