【问题标题】:Julia - check elementwise if elements of vector x are in the vector yJulia - 检查向量 x 的元素是否在向量 y 中
【发布时间】:2019-02-10 21:15:58
【问题描述】:

我想按元素(或广播)检查向量 x 的元素是否在 Julia 中的向量 y 中,就像函数 checkin 所做的那样:

x = ["one", "two", "three", "four"]
y = ["two", "three", "five", "four"]

function checkin(x,y)
    for i = 1:length(y)
        if y[i] ∈ x
            println(true)
        else 
            println(false)
        end
    end
end
checkin(x,y)

输出:

true
true
false
true

如果我输入

x .∈ y

x .in y

我收到一个错误

通常,我确信存在一种更简单的方法来编写一个 9 行函数,但我找不到它

【问题讨论】:

    标签: vector julia element broadcasting


    【解决方案1】:

    用途:

    in.(y, Ref(x))
    

    您必须将x 包装在Ref 中或写入(x, )[x] 以使广播始终采用x 而不会对其进行迭代。

    请注意,我编写它是为了让您检查 y[i] 是否在 xi in eachindex(y) 中,因为这是您的参考实现的完成方式。

    【讨论】:

    • 再次感谢@Bogumił Kamiński。 Refgithub.com/JuliaLang/julia/blob/master/base/refpointer.jl 一样吗?
    • 是的,但在这个应用程序中,只需将其视为包含 x 的 0 维容器,它只有一个元素。最好使用Ref,而不是例如[x] 因为它是不可变的,并且在热代码中不会导致 Julia 进行额外的分配。 (x,) 应该与 Ref(x) 一样快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多