天天看點

向量笛卡爾積_julia-lang – Julia中兩個向量的笛卡爾積

Julia通常在嵌套循環中非常快,是以如果它們對你正常工作,你應該可以檢查性能,或者隻是堅持下去.

其他選項是使用repmat(這個比使用repeat更快一點):

[repmat(x,1,length(y))'[:] repmat(y,length(x),1)[:]]

對這兩種方法進行了一些快速測試:

x=rand(1000)

y=rand(1000)

function withrepeat(x,y)

[repeat(x, inner=[size(y,1)]) repeat(y, outer=[size(x,1)])]

end

function withrepmat(x,y)

[repmat(x,1,length(y))'[:] repmat(y,length(x),1)[:]]

end

withrepeat(x,y)

elapsed time: 0.21556302 seconds (95986112 bytes allocated)

with repmat(x,y)

elapsed time: 0.075604488 seconds (56000560 bytes allocated)

不知道為什麼會有這麼大的差異,我認為還有改進的餘地.

沒有嘗試過Iterators.jl包中的産品功能.

希望這可以幫助.

嘗試了幾個嵌套循環,确實更快:

function withloops (x,y)

leny=length(y)

lenx=length(x)

m=leny*lenx

OUT = zeros(Float64, m,2)

c=1

for i = 1:lenx

for j = 1:leny

OUT[c,1] = x[i]

OUT[c,2] = y[j]

c+=1

end

end

return OUT

end

并且,對于x和y,相同的蘭特(1000).

withloops(x,y)

elapsed time: 0.011350679 seconds (16000128 bytes allocated)