How to remove for loops from a code

I've to remove for loops from a code to speed it up.
the code is:
function [S p] = similarityMatrix(data,candidates)
[row,col] = size(data);
S = zeros(row,col,row*col);
if nargin == 1
candidates = 1:numel(data);
end
for z = 1 : numel(candidates)
c = candidates(z);
for i = 1 : row
for j = 1 : col
if c == sub2ind(size(data),i,j);
S(i,j,z) = NaN;
else
S(i,j,z) = -dist(data(c),data(i,j));
end
end
end
end
%aggiungo le preferenze
p = nanmedian(S(:));
S(isnan(S)) = p;
is there a way to improve it?

 採用された回答

Andrei Bobrov
Andrei Bobrov 2014 年 1 月 22 日
編集済み: Andrei Bobrov 2014 年 1 月 22 日

0 投票

n = numel(data);
S = -abs(bsxfun(@minus,data,reshape(data(candidates),1,1,[])));
S(candidates + (0:numel(candidates)-1)*n) = nan;
p = nanmedian(S(:));
S(isnan(S)) = p;

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

質問済み:

2014 年 1 月 22 日

編集済み:

2014 年 1 月 22 日

Community Treasure Hunt

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

Start Hunting!

Translated by