我正在使用Julia编程语言,我知道您可以通过以下方式使用find函数:
a = [ 1 2 3 4 3 5 3 6 7 8 9 3 ]
find(a .== 3)
它将返回:3, 5, 7, 12
足够简单。
但是,我的问题是,如果我们想将上面代码中的3替换为矢量,该怎么办。
例如:
a = [1 2 3 4 5 6 7]
b = [1 9 5 8]
以下语法对我没有用,但它传达了我的想法。我如何正确地执行以下操作?:
find (a .== b)
如果我们希望它返回1, 3
?
我知道R中的匹配函数做得很好,但是我有一个非常大的数据集,而R还没有很好地处理它。
答案 0 :(得分:7)
另一种方式 - 使用函数findin/2:
julia> findin(b,a)
2-element Array{Int64,1}:
1
3
julia> findin(a,b)
2-element Array{Int64,1}:
1
5
答案 1 :(得分:3)
你可以这样做:
julia>> find(x->x in b, a)
2-element Array{Int64,1}:
1
5
或者你想要1, 3
:
julia> find(x->x in a, b)
2-element Array{Int64,1}:
1
3
我还建议您使用
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 9, 5, 8]
而不是没有逗号的版本,因为列操作比Julia中的行操作更有效。
此外,写find(x->x==3, a)
比find(a.==3)
更有效,因为后者将首先创建一个完整的布尔向量然后搜索它,而前者将简单地遍历{{1}的每个元素并执行比较。
编辑:如果您对匿名函数表示法感到好奇,则应该查找a
函数的帮助。关键是
find
在评估find(f, a)
部分时,将函数f
应用于a
之前的每个元素。