gpt4 book ai didi

matlab - Matlab:使用“ismember”的代码性能问题

转载 作者:行者123 更新时间:2023-12-01 15:49:39 25 4
gpt4 key购买 nike

我需要代码的这一部分更快地运行,因为它被多次调用。我是Matlab的新手,我觉得好像必须有一种方法来回去并不是那么简单。您可以提供任何有关如何提高我所拥有的速度或其他功能以帮助我执行此任务的帮助,我们将不胜感激。

(任务是仅将第一分钟位于“minuteintervals”集中的“alldata”行转换为“alldataMinutes”。“minuteintervals”只是“alldata”列的最小值,该列的最大值增加20至alldata的最大值。

minuteintervals= min(alldata(:,1)):20:max(alldata(:,1)); %20 second intervals
alldataMinutes= zeros(30000,4);
counter=1;
for x=1:length(alldata)
if ismember(alldata(x,1), minuteintervals)
alldataMinutes(counter,:)= alldata(x,:);
counter= counter+1;
end
end
alldataMinutes(counter:length(alldataMinutes),:)= [];

最佳答案

这应该可以为您提供所需的东西,而且速度应该快得多:

minuteintervals = min(alldata(:,1)):20:max(alldata(:,1));  %# Interval set
index = ismember(alldata(:,1),minuteintervals); %# Logical index showing first
%# column values in the set
alldataMinutes = alldata(index,:); %# Extract the corresponding rows

通过将值的向量传递给函数 ISMEMBER而不是一次传递一个值来工作。输出的 index是一个 logical向量,其大小与 alldata(:,1)相同,对于 alldata(:,1)中位于 minuteintervals集合中的元素,其值为1(即true),否则为0(即false)。然后,您可以使用 logical indexing轻松提取与 index中的行相对应的行,并将其放入 alldataMinutes中。

关于matlab - Matlab:使用“ismember”的代码性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com