Stan 变量声明:var_type var_name[length] 和 vector[length] var_name 之间的使用差异

Stan variable declarations: difference in use between var_type var_name[length] and vector[length] var_name

我是 Stan 的新人,我正在努力理解不同变量声明样式的使用方式之间的差异。特别是,我很困惑什么时候应该在变量类型后面加上方括号,什么时候应该在变量名称后面加上方括号。例如,给定 int<lower = 0> L; // length of my data,让我们考虑:

real N[L]; // my variable

对比

vector[L] N; // my variable

据我了解,两者都将变量 N​​ 声明为长度为 L 的向量。 两者之间的唯一区别是第一种方式指定变量类型吗?它们可以互换使用吗?他们是否应该属于 Stan 代码的不同部分(例如,data vs parametersmodel)?

感谢您的解释!

real name[size]vector[size] name 可以互换使用。它们在内部的存储方式不同,因此您可以获得更好的性能。某些操作也可能仅限于一个和另一个(例如向量乘法),并且循环它们的最佳顺序会发生变化。例如。使用 matrix 与二维数组相比,先遍历行比先遍历列更有效,但是如果您有更具体的示例,这些就会出现。阅读方法是:

real name[size];

表示name是一个real类型的数组,所以一堆reals存储在一起

vector[size] name;

表示name是一个大小为size的向量,也是一堆实数存储在一起。但是 STAN 中的 vector 数据类型是基于 eigen c++ 库 (c++) 并且允许其他操作。

您还可以像这样创建向量数组:

vector[N] name[K];

这将生成一个 K 向量数组,大小为 N

底线:您可以使用 vectorreal 获得任何模型 运行,但它们的计算效率不一定相同。