我是Matlab的新手。负责加速程序。我肯定有更好的方法来执行以下语句:

for i = 2:length(WallId)
     if WallId(i) ~= WallId(i-1)
        ReducedWallId = [ReducedWallId;WallId(i)];
        ReducedWallTime = [ReducedWallTime;WallTime(i)];
        GroupCount = [GroupCount;tempCount];
        tempCount = 1;
    else
        tempCount = tempCount +1;
    end
end


我可以将各种变量预分配给“ length(WallId)”,但是完成后如何处理多余的变量?我关心的?

最佳答案

idx = find([true diff(WallId) ~= 0]);
ReducedWallId = WallId(idx);
ReducedWallTime = WallTime(idx);
GroupCount = diff([idx numel(WallId)+1]);


假设您想要的是WallId和WallTime中唯一数据的摘要,那么您应该
确保首先对WallId进行排序。您可以重新组织WallTime进行匹配,如下所示:

[WallId, ind] = sort(WallId);
WallTime = WallTime(ind);


另外,只要WallTime匹配,则WallTime匹配时,您只会得到正确的答案。

关于optimization - Matlab:优化这个吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7609916/

10-10 01:45