【发布时间】:2024-01-18 19:52:01
【问题描述】:
我对 Matlab 的“查找”功能进行了大量调用。例如,下面应该给出本质:
x=rand(1,10^8);
indx=zeros(1,10^8);
for i=1:10^8
indx(i) = find([0.2, 0.52, 0.76,1] < x(i), 1, 'last');
end
有没有办法对这段代码进行矢量化以加快速度?仅将 x 作为向量包含在内会产生错误。如果矢量化是不可能的,那么任何其他关于速度的建议将不胜感激。我希望解决的实际问题有一个相当长的向量来代替 [0.2, 0.52, 0.76,1],因此任何解决方案都不应依赖于我提供的特定向量。
谢谢。
【问题讨论】:
-
在该示例中,结果始终为
4。你确定要'last'吗? -
对....我已经翻转了不等式(在我最近的编辑中),使它变得不平凡。只是试图构建一个以简单方式捕捉真正问题的玩具问题。感谢您发现它。
-
警告:如果不等式不满足
x,您的循环将出错。尝试使用x中小于0.2的任何值
标签: matlab find vectorization