Arrays 在MATLab中不使用for循环从数组中移动值的最佳方法?

Arrays 在MATLab中不使用for循环从数组中移动值的最佳方法?,arrays,matlab,select,move,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); en

所以我试图根据其中一列中的值来分离数组。。。问题是我使用的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),我需要合适的时间值来匹配它们

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

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

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

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

下面是一个在C#中使用它的示例:

IList list=新列表{1,2,3,4,5,6};
var lookup=list.ToLookup(num=>num%2==0);
IEnumerable trueList=查找[true];
IEnumerable falseList=查找[false];

其思想是,您可以根据谓词(true和false场景)拆分列表。

这非常完美。“它在大约5%的时间内完成任务。”马特斯说。很高兴它对堆栈溢出有帮助,并表示欢迎。这是一个MATLAB问题,而不是C#问题-1.这也不能回答OP的问题,因为您使用的数据不是原始问题的一部分。@rayryeng:谁告诉过您我想为他/她的问题提供一个完整的解决方案?我在这里只介绍了使用查找数据结构的想法,这样他/她就可以根据自己的领域问题对其进行调整。你的态度不好。如果我的态度不好,我向你道歉,但你给出的答案使用的方法与被问到的根本不同。OP询问如何在MATLAB中实现。用C#提供解决方案对OP没有好处。好的,没问题。祝您有个美好的一天。
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];