Subscript indices must either be real positive integers or logicals.
1 次查看(过去 30 天)
显示 更早的评论
Hi everyone, I am trying to implement the K-Nearest Neighboors (K-NN) function and I have trouble understanding the error. I have looked at the forum of Mathworks already but didn't find answer of my problem. I tried to cast "idx(:)" to int16 but it still didn't work. Can anyone help me fix this problem and help me understand the reason why it doesn't work? Thanks!
function [ y_est ] = my_knn(X_train, y_train, X_test, k, type)
%MY_KNN Implementation of the k-nearest neighbor algorithm
% for classification.
%
% input -----------------------------------------------------------------
%
% o X_train : (N x M_train), a data set with M_test samples each being of dimension N.
% each column corresponds to a datapoint
% o y_train : (1 x M_train), a vector with labels y \in {0,1} corresponding to X_train.
% o X_test : (N x M_test), a data set with M_test samples each being of dimension N.
% each column corresponds to a datapoint
% o k : number of 'k' nearest neighbors
% o type : (string), type of distance {'L1','L2','LInf'}
%
% output ----------------------------------------------------------------
%
% o y_est : (1 x M_test), a vector with estimated labels y \in {0,1}
% corresponding to X_test.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[N,M_train]=size(X_train);
[N,M_test]=size(X_test);
d=zeros(M_test,M_train);
y_est=zeros(1,M_test);
B=zeros(1,k);
for test=1:M_test
for train=1:M_train
d(test,train)=my_distance(X_train(:,train),X_test(:,test), 'L2');
end
%find the k minimum value for each line
val=zeros(k);
idx=zeros(k);
for i=1:k
[val(i),idx(i)]=min(d(test,:));
d(test,idx(i))=max(d(test,:));
end
y_est(1,test)=mode(y_train(idx(:)));
end
end
Here is the error that still appear:
_Subscript indices must either be real positive integers or logicals.
Error in my_knn (line 38) y_est(1,test)=mode(y_train(idx(:)));_
0 个评论
回答(1 个)
Image Analyst
2016-10-31
Use the debugger to step through and find out what the values of idx are. They can't be 0, negative, or fractional numbers. See the FAQ: http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!