这是我第一次在朱莉娅(Julia)尝试,所以如果您觉得这很琐碎,请原谅我。我的Julia代码已经比Python代码执行得更好,但是我还剩下一个有关打字的问题。
对于科学程序,我正在使用类型稳定且维数固定的多个数组。该程序旨在通过数学上不平凡的方案更新这些阵列,以使能量函数最小化。我已经在全局范围内定义了这些数组
const A = Array{Complex{Float32}}(dim)
dim
维度在哪里。我注意到添加const
引起了我的计算大大加快(速度提高了3倍)。随后,这些数组的内容在函数中由初始化和更新A[:] =...
。
是否const
在全局范围内将固定维的类型稳定数组定义为s,并通过访问它们进行更新被A[:]
认为是不好的做法?
在替代方法上,我最好的选择是键入所有函数的输入参数,并传递许多变量。这会更可取吗?
我的(主观的)观点是,将它们定义为const
然后更改内容本身并不一定是坏习惯。在Julia中很明显,const
声明是关于变量值绑定的,而不是值的内部。
但是,如果使用相同的变量A来保存不同的未连接值(而不是同一矩阵的不同形式,例如简化形式),那肯定是不好的做法。A[:] .= A .* 2
很好,A[:] .= X
不是。
同样,具有多个在不同位置突变的全局变量通常是一种代码味道,并且常常导致细微和不太细微的错误。这也使代码难以推理。
如何将变量封装为单一struct
类型,例如。
struct ArrayVars
A::Array{Complex{Float32}, dim}
B::Array{Float64, dim}
...
end
并在init
样式函数中创建该实例?(希望ArrayVars
考虑到所涉及数组的语义,您可以为类型提供一个比其更好的名称。)然后,您可以将此类型的单个变量传递给函数并操作其中的数组,而不用四处传递每个函数有很多变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句