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)

谢谢我想我只需要重新安排一些事情来让它工作。