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)