function [z Z] = IDND6(I,O,q,Q) % Yet another IDND alternative N = size(I,1); a = length(O); if a ~= N error('I and O sizes do not match!') end if nargin < 3 [q Q] = nc(O); end class{q} = []; NN(q) = 0; for i = 1:q class{i} = find(O==Q(i)); NN(i) = length(class{i}); end d(N,N) = Inf; for i = 1:(N-1) X = ones((N-i),1)*I(i,:); d((i+1):N,i) = sum( (X - I((i+1):N,:)).^2,2 ) ; d(i,i) = Inf; end D = d + d'; % A compact form of the distance matrix ZZ(N) = 0; for i = 1:N f = find(O(i) == Q); ZZ(i) = (N / sum(1./(D(i,:)+eps)) - eps) / (NN(f) / sum(1./(D(i,class{f})+eps)) - eps); end Z = min(ZZ/2,1); z = sum(Z>0.5)/N;