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)