-
Notifications
You must be signed in to change notification settings - Fork 2
/
findSimilarTra_secondOrder.m
71 lines (54 loc) · 2 KB
/
findSimilarTra_secondOrder.m
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function [maxSimilarity,maxIdx]= findSimilarTra_secondOrder(SP,latLong_using_prototypes_index,latLong2SP,num,k,randnum, mode)
SPdistMat = MatCos(SP,SP);
if isequal(mode,'binary')
[index_of_trajectory, pointer_start] = unique(latLong_using_prototypes_index(:,1),'stable');
numberOfTrajectories = length(index_of_trajectory);
TraSp = zeros(numberOfTrajectories,size(SP,1));
for i = 1:numberOfTrajectories
if i ~= numberOfTrajectories
a = latLong_using_prototypes_index(pointer_start(i) : pointer_start(i+1)-1,2);
else
a = latLong_using_prototypes_index(pointer_start(i) : end,2);
end
for j = 1:length(a)
indexSP = a(j);
TraSp(i,indexSP) = 1;
end
end
TraTra = TraSp * SPdistMat * TraSp';
elseif isequal(mode,'multi')
[index_of_trajectory, pointer_start] = unique(latLong2SP(:,1),'stable');
numberOfTrajectories = length(index_of_trajectory);
TraSp = zeros(numberOfTrajectories,size(SP,1));
for i = 1:numberOfTrajectories
if i ~= numberOfTrajectories
a = latLong2SP(pointer_start(i) : pointer_start(i+1)-1,2);
else
a = latLong2SP(pointer_start(i) : end,2);
end
for j = 1:length(a)
indexSP = a(j);
TraSp(i,indexSP) = TraSp(i,indexSP) + 1;
end
end
TraTra = TraSp * SPdistMat * TraSp';
else
error('pay attention to the mode !')
end
maxSimilarity = zeros(num,numberOfTrajectories - 1);
maxIdx = zeros(num,numberOfTrajectories - 1);
for indxxx = 1:num
i = randnum(indxxx);
similarity = TraTra(i,:);
[similarity, index] = sort(similarity, 'descend');
similarity(index == i) = [];
index(index == i) = [];
maxSimilarity(indxxx,:) = similarity;
maxIdx(indxxx,:) = index;
if k >= numberOfTrajectories
k = numberOfTrajectories - 1;
end
maxSimilarity(:,k+1:end) = [];
maxIdx(:,k+1:end) = [];
end
end