gpt4 book ai didi

matlab - 快速定位排序向量中的位置

转载 作者:行者123 更新时间:2023-12-02 08:18:02 25 4
gpt4 key购买 nike

我在 matlab 中有一个排序向量,称它为 F,对于这个例子来说,它是这样给出的:

F = [1,2,3,4,5,6,7,8,9,10];

我也有一个任意矩阵 A,其元素在 0-10 区间内说:

 A = [1.5,9.1,5.2;2.3,0.4,7.9];

然后我对矩阵 I 感兴趣,对于 A 中的每个条目,它告诉我它属于 F 中的哪个区间,给出如下下限,在这种情况下:

I = [1,9,5;2,0,7];

我知道,在这种情况下,可以通过向下舍入获得,但我正在寻找一般情况。我也已经有一段代码为我解决了这个问题,它是:

I = zeros(size(A));
X(A<F(1)) = 0;
for i = 2:length(F)
X(A<F(i) & A>F(i-1)) = i-1;
end
end

但是,此时,我为每个 i 检查 A 中的所有条目,即使这些条目只满足一次条件。

所以我的问题是找到一种更有效的方法来做到这一点。首先是为了避免多次检查相同的条目,但也可能利用向量 F 进行排序。

我也尝试过使用 arrayfun(@(a) find(a>=F,1)-1,A); 但是这比上面的逻辑版本慢了大约 100 倍。

有什么建议吗?

最佳答案

这可以完成工作,而且速度可能相当快:

result = reshape(sum(bsxfun(@lt, F(:), A(:).'), 1), size(A)); 

我假设间隔定义为 (a,b)。对于 [a,b) 将 @lt 替换为 @le

做一些 binary search 可能会更快,利用向量已排序的事实。有可能 histcounts在内部这样做。第三个输出给出了你想要的:

[~, ~, result] = histcounts(A, F);

关于matlab - 快速定位排序向量中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096549/

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