首页 > 解决方案 > Julia:searchsorted 的矢量化版本

问题描述

对于 array 中的每个值B,如何A通过一个函数调用找到 array 中最接近的值,类似于searchsorted(A, B)numpy.

标签: julia

解决方案


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成为广播下的标量)。这可以通过包装ARef.


推荐阅读