问题: 我有14个用户的轨迹:我比较了每个用户和每个用户的轨迹,我计算了最长的公共序列:TrajSimilarity(1,k).aLongestString。现在我想比较第一个用户与其他用户的最长公共序列,第二个用户与其他用户的最长公共序列等。
使用此代码比较两个用户的最长公共序列没有问题:
string3=TrajSimilarity(1,3).aLongestString;
string4=TrajSimilarity(1,4).aLongestString;
[D,dist,aLongestString]=LCS(string3,string4);
U=numel(regexp(string3,'(\(\d+\)|\d)'));
V=numel(regexp(string4,'(\(\d+\)|\d)'));
nLCS=numel(regexp(aLongestString,'(\(\d+\)|\d)'));
ratioU=nLCS/U;
ratioV=nLCS/V;
EA = (ratioU + ratioV)/2;
WA = (U*ratioU+V*ratioV)/(U+V);
LCS是一个计算两个字符串之间最长公共子字符串的函数(如果有用,我会发布一个链接)。 我有问题创建一个优化的代码,比较第一个用户与其他用户的最长公共序列,第二个用户与其他用户的最长公共序列等。 我试试这段代码:
for k=1:14
string3=TrajSimilarity(1,k).aLongestString;
for j=2:14
string4=TrajSimilarity(1,j).aLongestString;
[A(j,k).D,A(j,k).dist,A(j,k).aLongestString]=LCS(string3,string4);
end
end
但它会产生错误:
Attempted to access L(0,0); index must be a positive integer or
logical.
Error in LCS (line 52)
dist = L(n,m);
你能帮我一个忙吗?感谢
答案 0 :(得分:2)
正确的代码是:
% Similarity between two users
for k=1:14
% string3 e string4 must be > 1
string3=TrajSimilarity(1,k).aLongestString;
for j=2:14
string4=TrajSimilarity(1,j).aLongestString;
% entrambe le variabili temporanee devono essere non vuote per
% poter essere confrontate
if (~isempty(string3))&&(~isempty(string4))
% calculate distance and a longest string
[A(j,k).D,A(j,k).dist,A(j,k).aLongestString]=LCS(string3,string4);
U=numel(regexp(string3,'(\(\d+\)|\d)'));
V=numel(regexp(string4,'(\(\d+\)|\d)'));
A(j,k).nLCS=numel(regexp(A(j,k).aLongestString,'(\(\d+\)|\d)'));
A(j,k).ratioU=A(j,k).nLCS/U;
A(j,k).ratioV=A(j,k).nLCS/V;
A(j,k).EA = (A(j,k).ratioU + A(j,k).ratioV)/2;
A(j,k).WA = (U*A(j,k).ratioU+V*A(j,k).ratioV)/(U+V);
end
end
end
仅当string3和string4为> 1时,代码才有效,并且不会产生错误。