对于数组B
中的每个值,如何通过一个函数调用在数组A
中找到最接近的值,类似于searchsorted(A, B)
在numpy中的工作方式。
答案 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
中的范围(也可以检出函数searchsortedfirst
和searchsortedlast
)