Error while calculating Cosine distance

2 Ansichten (letzte 30 Tage)
Balaji M. Sontakke
Balaji M. Sontakke am 25 Dez. 2018
Bearbeitet: madhan ravi am 25 Dez. 2018
Following is the error while calculating Cosine distance....
Subscripted assignment dimension mismatch.
Error in CosineDistance (line 28)
Distance(i,j) = - (ClientMean(i,:)'*EvalSet(j,:))/(norm_x*norm_y);
function Distance = CosineDistance(ClientMean, EvalSet)
% Calculate Cosine Distance
%
% Inputs:
% ClientSet ---- c* dim matrix
% EvalSet ---- n*dim matrix
% Outputs:
% Distance ---- c*n matrix
if ~exist('ClientMean','var')
error('Input arguments error.');
end
if ~exist('EvalSet','var')
error('Input arguments error.');
end
[c, d] = size(ClientMean);
[n, dim] = size(EvalSet);
if (d ~= dim)
error('Dimensionality disagreement.');
end
for i = 1 : c
for j = 1 : n
norm_x = norm(ClientMean);
norm_y = norm(EvalSet);
Distance(i,j) = - (ClientMean(i,:)'*EvalSet(j,:))/(norm_x*norm_y);
end
end
  1 Kommentar
Walter Roberson
Walter Roberson am 25 Dez. 2018
Are you sure about that code? It would make more sense if it was
ClientMean(i,:)*EvalSet(j,:)'
as that would be 1 x d * d x 1, giving 1 x 1.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

madhan ravi
madhan ravi am 25 Dez. 2018
Bearbeitet: madhan ravi am 25 Dez. 2018
To view answer:
ClientMean=....your matrix;
EvalSet=....your matrix;
Distance = CosineDistance(ClientMean, EvalSet) % function call
celldisp(Distance) % after the calling of the function
Just change yours to below:
function Distance = CosineDistance(ClientMean, EvalSet) % function definition
% Calculate Cosine Distance
%
% Inputs:
% ClientSet ---- c* dim matrix
% EvalSet ---- n*dim matrix
% Outputs:
% Distance ---- c*n matrix
if ~exist('ClientMean','var')
error('Input arguments error.');
end
if ~exist('EvalSet','var')
error('Input arguments error.');
end
[c, d] = size(ClientMean);
[n, dim] = size(EvalSet);
if (d ~= dim)
error('Dimensionality disagreement.');
end
Distance=cell(c,n); % pre-allocate
ctr=1;
for i = 1 : c
for j = 1 : n
norm_x = norm(ClientMean);
norm_y = norm(EvalSet);
Distance{ctr} = - (ClientMean(i,:)'*EvalSet(j,:))/(norm_x*norm_y);
ctr=ctr+1;
end
end
end

Weitere Antworten (0)

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by