2016-07-15 55 views

回答

2

嘗試使用VectorizedRoutines.jl

# Pkg.clone("https://github.com/ChrisRackauckas/VectorizedRoutines.jl") 
# Will be Pkg.add("VectorizedRoutines") after being added to package system 
using VectorizedRoutines 
v1=1:5 
v2 = 5:-1:1 
R.rep(v1,each = v2) 

實現通過aireties的建議(提高了打字位,所以你不必收集)的關RLEVectors.jl的。

這是一個軟件包,我將R/MATLAB/Python中的所有矢量化例程集合在一起,以便將函數(和想法)移植到Julia更簡單。隨意在Github存儲庫中打開問題,以獲得要實現的功能建議,我應該瞭解的其他軟件包中實現的功能,與其他語言不匹配的語法或者是否存在其他問題。如果你實現這樣的功能,也可以隨意給出一個拉取請求。如果您需要幫助,請不要害怕使用基本功能進行拉取請求,我可以幫助您。

+0

非常感謝 - 這確實更快,更有效率! –

+0

如果你有時間,你還會介意快速瀏覽http://codereview.stackexchange.com/questions/134926/benchmarks-of-technical-programming-languages-r-julia-mathematica-matlab-fo - I做了一個R到朱莉婭那裏的一個小例子程序,但是我在朱莉婭的基準測試結果很差 - 你可能馬上告訴我我做錯了什麼? –

2

這裏是一個選項使用數組內涵:

v1 = 1:5; 
v2 = 5:-1:1; 

out = vcat([ [v1[idx] for n = 1:v2[idx]] for idx = 1:length(v1) ]...) 

另外,如果你想要的東西靠近R語法,您可以使用rep()函數從RLEVectors包:

## Pkg.add("RLEVectors") 
using RLEVectors 
out2 = rep(collect(v1), each = collect(v2)) 

由於是,out2將是一個帶有運行長度編碼的向量。它的功能與大多數其他矢量的功能類似,在某些情況下,內存和運算速度會提高。但是,如果你想要一個普通的矢量,只需使用collect(out2)

+0

非常感謝,非常感謝!只是在這裏學習朱莉婭...... –

+0

@TomWenseleers當然可以。另請參閱我更新的答案,另一個選項可能更接近您熟悉的R語法。 –