gpt4 book ai didi

julia - Julia 中两个向量的笛卡尔积

转载 作者:行者123 更新时间:2023-12-04 09:47:15 25 4
gpt4 key购买 nike

我有两个向量 xy , 长度分别为 n 和 p。有没有内置的方法来创建一个 np x 2 矩阵,它将是

x[1] y[1]
x[1] y[2]
...
x[1] y[p]
x[2] y[1]
...
x[n] y[p]

我可以用嵌套的 for 循环来做到这一点,但我正在寻找一个内置函数,如果它存在的话。

最佳答案

Julia 在嵌套循环中通常非常快,所以如果它们对你来说正常工作,你应该检查性能,也许只是坚持下去。

另一种选择是使用 repmat (这个比使用重复快一点):

[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 包里面的 product 函数没试过。

这里还有更多信息: https://groups.google.com/forum/#!topic/julia-users/dtl--SyFgwY

希望这可以帮助。

尝试了几个嵌套循环,确实更快:
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

而且,对于相同的 rand(1000)xy .
withloops(x,y)
elapsed time: 0.011350679 seconds (16000128 bytes allocated)

关于julia - Julia 中两个向量的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com