使用带有两个向量的find()函数

时间:2016-11-28 22:12:07

标签: find julia

我正在使用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还没有很好地处理它。

2 个答案:

答案 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 之前的每个元素