フィルターのクリア

calculate distance using the below equation

3 ビュー (過去 30 日間)
Elysi Cochin
Elysi Cochin 2013 年 4 月 11 日
i have 2 variables, dataMatrix and queryMatrix..... dataMatrix contains 245 rows and 38 column values...... and queryMatrix contains 1 row and 38 column values...... i calculate the euclidean distance and sort the distances in ascending order as below.....
for w=1:245
dist = sum((repmat(queryMatrix(w,:),245,1)-dataMatrix).^2,2);
[sortval sortpos] = sort(dist,'ascend');
neighborIds(w,:) = sortpos(1:k);
neighborDistances(w,:) = sqrt(sortval(1:k));
end
instead of euclidean distance i want to use the distance formula in the below link.....
but i dont know to write the equation in matlab...... please can someone convert that equation to matlab..... it would be great help to me..... please do reply......
  1 件のコメント
Matt J
Matt J 2013 年 4 月 11 日
編集済み: Matt J 2013 年 4 月 11 日
If queryMatrix only has 1 row, how can w run from 1 to 245 in queryMatrix(w,:)?

サインインしてコメントする。

採用された回答

Matt J
Matt J 2013 年 4 月 11 日
Assuming queryMatrix and dataMatrix are both 245x38, the whole thing can be done without loops,
d=permute(dataMatrix,[1,3,2]);
q=permute(queryMatrix,[3,1,2]);
num = abs(bsxfun(@minus,d,q));
den = bsxfun(@plus,abs(d),abs(q));
dist=sum(num./den,3);
[sortval sortpos] = sort(dist);
neighborIds = sortpos(1:k,:);
neighborDistances = sqrt(sortval(1:k,:));
  2 件のコメント
Elysi Cochin
Elysi Cochin 2013 年 4 月 11 日
sir what is 1,3,2 and 3,2,1 in
d=permute(dataMatrix,[1,3,2]);
q=permute(queryMatrix,[3,1,2]);
shud i use it in my datavalues???..... as my datavalues are not of the same row and column values.... what changes should i make when i use for loop?? please do reply sir....
Matt J
Matt J 2013 年 4 月 11 日
編集済み: Matt J 2013 年 4 月 11 日
To understand the syntax of the PERMUTE command, see
doc permute
help permute
As I mentioned, you don't need to be using a for-loop. The only requirement here is that dataMatrix and queryMatrix have the same number of columns.

サインインしてコメントする。

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2013 年 4 月 11 日
編集済み: Andrei Bobrov 2013 年 4 月 11 日
dataMatrix = randi([-10,10],10,5);
queryMatrix = randi([-10 10],1,5);
d = bsxfun(@(x,y)abs(x - y)./(abs(x) + abs(y)),...
dataMatrix,permute(queryMatrix,[3 2 1]));
d = sort(squeeze(sum(d,2)));
  2 件のコメント
Elysi Cochin
Elysi Cochin 2013 年 4 月 11 日
sir in my code should i use for loop??? because when i do without for loop i'm getting all values NaN......
dataMatrix = dataMatrix.*sign(rand(size(dataMatrix)));
queryMatrix = queryMatrix.*sign(rand(size(queryMatrix))-.5);
shud i use this rand function for my set of values??
Elysi Cochin
Elysi Cochin 2013 年 4 月 12 日
thank u all...

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeExpression Analysis についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by