朱莉娅中的矢量化“in”函数?

2024-03-31

我经常想要循环遍历数据帧的长数组或列,并且对于每个项目,查看它是否是另一个数组的成员。而不是做

giant_list = ["a", "c", "j"]
good_letters = ["a", "b"]
isin = falses(size(giant_list,1))
for i=1:size(giant_list,1)
    isin[i] = giant_list[i] in good_letters
end

在 Julia 中是否有任何矢量化(双矢量化?)方法可以做到这一点?与基本运算符类似,我想做类似的事情

isin = giant_list .in good_letters

我意识到这可能是不可能的,但我只是想确保我没有错过任何东西。我知道我可能可以使用 DataStructures 中的 DefaultDict 来做类似的事情,但不知道基础中的任何内容。


The indexin http://docs.julialang.org/en/release-0.3/stdlib/collections/#Base.indexin函数执行与您想要的类似的操作:

indexin(a, b)

返回包含最高索引的向量b对于每个值a这是一个成员b。输出向量在任何地方都包含 0a不是以下成员b.

因为您想要为您的每个元素提供一个布尔值giant_list(而不是索引good_letters),您可以简单地执行以下操作:

julia> indexin(giant_list, good_letters) .> 0
3-element BitArray{1}:
  true
 false
 false

The 实施indexin https://github.com/JuliaLang/julia/blob/2226a6d52e9c2556367a42ab0499d5d0c22cc8cf/base/array.jl#L1253-L1256非常简单,并且指出了如果您不关心中的索引如何优化它的方法b:

function vectorin(a, b)
    bset = Set(b)
    [i in bset for i in a]
end

只有有限的一组名称可以用作中缀运算符,因此不可能将其用作中缀运算符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

朱莉娅中的矢量化“in”函数? 的相关文章

随机推荐