2016-11-28 73 views
4

我現在用的是朱莉婭編程語言,我知道,你可以使用查找功能以下列方式功能:使用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沒有很好地處理它。

+1

爲什麼不返回1,5? –

回答

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 
+0

不錯,我忘了那個。 – DNF

+1

奇怪的是,我發現我的版本比Julia 0.5快了10倍!你能證實嗎? – DNF

+0

@DNF,我是Julia的初學者,所以我也想知道=) –

5

你可以這樣做:

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)因爲後者將首先創建一個完整的布爾矢量然後搜索,雖然前者將簡單地通過的a每個元素迭代,並執行比較。

編輯:如果您對匿名函數符號感興趣,您應該查找find函數的幫助。的一點是,

find(f, a) 

應用功能f到的a每個元素之前當它正在評估find一部分。