首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab:优化代码

Matlab:优化代码
EN

Stack Overflow用户
提问于 2015-12-10 16:04:15
回答 1查看 86关注 0票数 1

问题:我有14个用户的轨迹:我比较了每个用户的轨迹,对于每个用户,我计算了最长的公共序列: TrajSimilarity(1,k).aLongestString。现在我想比较一下第一用户和其他用户最长的公共序列,第二用户最长的公共序列和其他用户的最长公共序列等等。

使用以下代码比较两个用户最长的公共序列没有问题:

代码语言:javascript
复制
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是一个计算两个字符串之间最长的公共子字符串的函数(如果有帮助的话,我会发布一个链接)。我在创建一个优化代码时遇到了问题,该代码比较了第一个用户和其他用户最长的公共序列,第二个用户的最长公共序列和其他用户的最长公共序列等等。

代码语言:javascript
复制
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

但是它会产生错误:

代码语言:javascript
复制
Attempted to access L(0,0); index must be a positive integer or
logical.

Error in LCS (line 52)
dist = L(n,m);

能帮我个忙吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 08:13:58

正确的代码是:

代码语言:javascript
复制
% 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且不生成错误时,代码才能工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34206465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档