朱莉娅:searchsorted的矢量版本

时间:2019-03-25 14:15:25

标签: julia

对于数组B中的每个值,如何通过一个函数调用在数组A中找到最接近的值,类似于searchsorted(A, B)在numpy中的工作方式。

2 个答案:

答案 0 :(得分:2)

searchsortedfirst.(Ref(A),B)

应该给您想要的结果。示例:

julia> A = [1, 2, 2, 4, 4, 4, 4, 4, 9, 10];

julia> B = [10, 6, 9];

julia> searchsortedfirst.(Ref(A), B)
3-element Array{Int64,1}:
 10
  9
  9

np.searchsorted比较:

julia> using PyCall

julia> np = pyimport("numpy");

julia> np.searchsorted(A,B)
3-element Array{Int64,1}:
 9
 8
 8

(相当于Python的基于0的索引)。

说明: searchsortedfirst.(Ref(A),B)是做什么的?

该点告诉Julia广播searchsortedfirst呼叫。但是,我们必须确保在每次调用中仍将A视为一个数组(我们希望A是广播下的标量)。这可以通过将A包装在Ref中来实现。

答案 1 :(得分:1)

假设B未排序(但是您也不能在numpy中使用searchsorted),您可以这样做:

[argmin(abs(a .- B)) for a in A]

如果B已排序,并且您接受未在数组B中找到最接近的值(searchsorted找不到最接近的值),则可以这样写:

searchsorted.(Ref(B), A)

,您将获得将A的所有元素放置在B中的范围(也可以检出函数searchsortedfirstsearchsortedlast