Optimization 使用大量dot产品的更好方法?
我是朱莉娅的新手,编程不是很好,如果有一个明显的答案我错过了,我很抱歉。 我试图做一个计算,包括取很多向量与三个元素的点积,比如说Optimization 使用大量dot产品的更好方法?,optimization,julia,Optimization,Julia,我是朱莉娅的新手,编程不是很好,如果有一个明显的答案我错过了,我很抱歉。 我试图做一个计算,包括取很多向量与三个元素的点积,比如说 function foo() z = 0.0 for i in 1:10000 z = dot([0.0, 1.0, 0.0], [1.0, 0.0, 0.0]) end end 但是当我跑的时候 @time foo() 我明白了 0.001010 seconds (20.00 k allocations: 1.831 MB) 这似乎是这
function foo()
z = 0.0
for i in 1:10000
z = dot([0.0, 1.0, 0.0], [1.0, 0.0, 0.0])
end
end
但是当我跑的时候
@time foo()
我明白了
0.001010 seconds (20.00 k allocations: 1.831 MB)
这似乎是这个计算的一个很大的分配
考虑到我需要运行它不是10000次而是接近10^9,
这需要大约5分钟,并分配千兆字节的内存。我觉得
好像它不应该分配这么多。我错了?有没有更好的方法可以做到这一点,它不需要分配太多,而且可能更快?分配来自这样一个事实:您每次都要创建类似
[1.0,0.0,0.0]
的数组。如果从循环中删除此创建,其行为将与预期的一样:
function foo2(N=10^4)
a, b = [0.0, 1.0, 0.0], [1.0, 0.0, 0.0]
z = 0.0
for i in 1:N
z += dot(a, b)
end
return z
end
@time foo2()
0.000199 seconds (7 allocations: 368 bytes)
@time foo2(10^7)
0.179523 seconds (8 allocations: 384 bytes)
谢谢我想我只需要重新安排一些事情来让它工作。