我经常想遍历数据帧的一个长数组或列,并且对于每个项目,查看它是否是另一个数组的成员。而不是做
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 来做类似的事情,但对 base 一无所知。
最佳答案
indexin
function 执行类似于您想要的操作:
indexin(a, b)
Returns a vector containing the highest index in
b
for each value ina
that is a member ofb
. The output vector contains 0 wherevera
is not a member ofb
.
由于您希望
giant_list
中的每个元素都有一个 bool 值(而不是 good_letters
中的索引),您可以简单地执行以下操作:julia> indexin(giant_list, good_letters) .> 0
3-element BitArray{1}:
true
false
false
implementation of indexin
非常简单,并且指出了如果您不关心 b
中的索引如何优化它的方法。 :function vectorin(a, b)
bset = Set(b)
[i in bset for i in a]
end
只能将有限的一组名称用作中缀运算符,因此不可能将其用作中缀运算符。
关于dataframe - Julia 中的矢量化 "in"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661315/