在MATLab中没有for循环从数组中移动值的最佳方法?

时间:2014-11-20 17:44:40

标签: arrays matlab select move

所以我试图根据其中一列中的值来分离数组...问题是我正在使用的for循环有效,但是速度非常慢。我可以站起来喝一杯咖啡,在我的机器上完成时吃三明治。

w = waitbar(0,'Separating Velocity values based on processor address');
for i = 1:length(timeDEC);
if paddrDEC(i) == 0
    timeU(i) = timeDEC(i);
    velU(i) = Velocity(i);
end
if paddrDEC(i) == 1
    timeV(i) = timeDEC(i);
    velV(i) = Velocity(i);
end
waitbar(i/length(timeDEC),w);
end
close(w);

处理器地址是二进制的,因此只有2个选项(U和V),我需要适当的时间值。

2 个答案:

答案 0 :(得分:0)

尝试逻辑索引,如下所示:

timeU = timeDEC(paddrDEC==0);
velU = Velocity(paddrDEC==0);

timeV = timeDEC(paddrDEC==1);
velV = Velocity(paddrDEC==1);

答案 1 :(得分:-3)

您可以使用查找拆分。它非常快。

以下是在C#中使用它的示例:

IList<int> list = new List<int> { 1, 2, 3, 4, 5, 6 };

var lookup = list.ToLookup(num => num % 2 == 0);

IEnumerable<int> trueList = lookup[true];

IEnumerable<int> falseList = lookup[false];

这个想法是你可以根据谓词(真假场景)拆分列表。