gpt4 book ai didi

matlab - 矢量化 Matlab 'find' 的多个调用

转载 作者:行者123 更新时间:2023-12-04 18:44:24 24 4
gpt4 key购买 nike

我对 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] 的位置有一个相当长的向量,因此任何解决方案都不应该依赖于我提供的特定向量。

谢谢。

最佳答案

对于 R2015a 及更高版本 的 MATLAB,答案来自 crjones使用 discretize 给出最佳选择:

edges = [0.2, 0.52, 0.76, 1];
indx = discretize(x, edges, 'IncludedEdge', 'right');

x 中超出 edges 范围的任何值的索引都将为 NaN


对于 MATLAB 版本 R2014b 和更高版本,您还可以使用 histcounts :

[~, ~, indx] = histcounts(x, edges);

discretize 的不同之处在于,您还可以获得每个 bin(第一个输出)中值的计数,以及 x 中超出范围的值的索引edges 将为 0


对于 R2014b 之前 的 MATLAB 版本,您可以使用 histc (在较新版本中已弃用):

[~, indx] = histc(x, edges);

同样,您还可以获得每个 bin(第一个输出)中值的计数,xedges 范围之外的值的索引将是 0

关于matlab - 矢量化 Matlab 'find' 的多个调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777906/

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