朱莉娅:改变类型稳定数组的最佳实践

Eismc2

这是我第一次在朱莉娅(Julia)尝试,所以如果您觉得这很琐碎,请原谅我。我的Julia代码已经比Python代码执行得更好,但是我还剩下一个有关打字的问题。

对于科学程序,我正在使用类型稳定且维数固定的多个数组。该程序旨在通过数学上不平凡的方案更新这些阵列,以使能量函数最小化。我已经在全局范围内定义了这些数组

const A = Array{Complex{Float32}}(dim)

dim维度在哪里我注意到添加const引起了我的计算大大加快(速度提高了3倍)。随后,这些数组的内容在函数中由初始化和更新A[:] =...

是否const在全局范围内将固定维的类型稳定数组定义为s,并通过访问它们进行更新被A[:]认为是不好的做法?

在替代方法上,我最好的选择是键入所有函数的输入参数,并传递许多变量。这会更可取吗?

sundar-恢复莫妮卡

我的(主观的)观点是,将它们定义为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章