我在 this thread 中描述并解决了同样的问题,其中 julia 循环由于使用非最佳变量类型重复访问内存而显着减慢。然而,在我的例子中,我将张量(维度大于二)存储为多维数组,需要在 for 循环中一遍又一遍地求和,例如:
function randomTensor(M,N)
T = fill( zeros( M, M, M, M) , N)
for i in 1 : N
Ti = rand( M, M, M, M)
T[i] += Ti
end
return T
end
我是 Julia 的新手(事实上,我只是将它用于我需要一些 julia 模块的特定项目),所以我对变量类型等只有一般的了解,直到现在我'如果不是一般数组,我无法定义我的张量。我想要一个在上述链接中提出的解决方案,他们使用 Matrix{Float64}[]
来定义变量,但显然这仅适用于一维或二维数组。也不能使用元组,因为我需要对这些值求和。不同实现的任何提示?
提前谢谢大家。
编辑:我发布的示例代码只是一个与我的代码结构相同的示例,我对生成和求和随机数不感兴趣:) 换句话说,我的问题是:是否有比 Array{Float, N} 更好的变量类型来执行操作(例如张量乘以标量...)或对内存有“更好的访问”?
最佳答案
目前还不清楚问题是什么。你的功能等同于:
randomTensor(M,N) = [rand(M, M, M, M) for i in 1:N]
你是说这太慢了吗?大部分时间应该用于创建随机数和为输出分配内存。
关于loops - 对于高维数组,Julia 中的数组访问循环很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64911569/