gpt4 book ai didi

matlab - 将矩阵限制在指定值内的有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:04 25 4
gpt4 key购买 nike

我正在处理一个包含数千行代码的大型 Matlab 测试台,我正在尝试优化最耗时的例程,这些例程是通过 Matlab 中的分析器确定的。我注意到其中一项最耗时的操作如下:

list = list((list(:,1) >= condxMin) & (list(:,1) <= condxMax) & (list(:,2) >= condyMin) & (list(:,2) <= condyMax),:);

具体来说,我有一个很大的坐标列表(至少 50000 x 2),我想限制这个列表的值,以便只保留验证这两个条件的点:list(:,1) 必须在 [condxMin, condxMax] 内,list(:2) 必须在 [condyMin condyMax] 内。

考虑到这行代码已经矢量化,我想知道是否有更有效的方法。另外,我想知道 Matlab 是否会短路。如果没有,那么我认为没有办法在不破坏矢量化的情况下做到这一点,并用 while 循环来做,我会写这样的东西:

j=1;
for i=1:size(list,1)
if(cond1 && cond2 && cond3 && cond4)
newlist(j,1:2) = list(i,1:2);
j=j+1;
end
end

预先感谢您的回答:)

最佳答案

看起来原始矢量化版本是我能找到的最快的方法,除非有任何真正聪明的想法。 Matlab 确实会短路,但不会对矩阵进行短路。您展示的循环实现会非常慢,因为您没有预先分配(也无法预先分配整个矩阵)。

我尝试了几个变体,包括一个 for 循环,它使用短路的 && 来确定索引是否坏,但没有这样的运气。从好的方面来说,对于 500 万个元素的坐标列表,您获得的矢量化版本的运行时间为 0.21 秒。

关于matlab - 将矩阵限制在指定值内的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214788/

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