-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChecking.m
More file actions
54 lines (50 loc) · 1.2 KB
/
Copy pathChecking.m
File metadata and controls
54 lines (50 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
clear;
clc;
dim = 2;
N = 100;
pts = rand(100,2);
tic
%Make a NxNxdim matrix with the differences between points
PTS = zeros(N,N,dim);
for i=1:N
PTS(i,:,:) = pts;
end
PTSdiff = PTS - permute(PTS, [2 1 3]); %permute is like transpose
%PTSdiff(i,j,:) is equal to pts(j,:) - pts(i,:)
%make it into a NxN cell array, with the i,j cell being pts(j,:) - pts(i,:)
PTSdiff2 = mat2cell(PTSdiff,ones(N,1),ones(N,1),[dim]);
% apply norm over all the cells
normdiff = cellfun(@(x) norm(reshape(x,dim,1)), PTSdiff2);
% set diagonal to 1's to avoid divide by zero errors
normdiff = normdiff + eye(N);
% adjacency matrix for the oscillator dynamics
A_osc = 1./normdiff;
toc
tic
invDis = zeros(N,N);
for i = 1:N
for j = i:N
invDis(i,j) = norm(pts(i,:)- pts(j,:));
invDis(j,i) = invDis(i,j);
end
end
invDis = invDis + eye(N);
invDis = 1./invDis;
toc
tic
invDis2 = zeros(N,N);
for i = 1:N
invDis2(i,:) = vecnorm(repmat(pts(i,:),N,1) - pts(:,:),2,2);
end
invDis2 = invDis2 + eye(N);
invDis2 = 1./invDis2;
toc;
% Fastest code
tic
A=pdist(pts);
Y = 1./internal.stats.pdistmex(pts','euc',[]);
invDis3 = zeros(N,N);
invDis3(tril(true(N),-1)) = Y;
invDis3 = invDis3 + invDis3';
invDis3 = invDis3 + eye(N);
toc