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 parameters
或 model
)?
感谢您的解释!
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
。
底线:您可以使用 vector
或 real
获得任何模型 运行,但它们的计算效率不一定相同。
我是 Stan 的新人,我正在努力理解不同变量声明样式的使用方式之间的差异。特别是,我很困惑什么时候应该在变量类型后面加上方括号,什么时候应该在变量名称后面加上方括号。例如,给定 int<lower = 0> L; // length of my data
,让我们考虑:
real N[L]; // my variable
对比
vector[L] N; // my variable
据我了解,两者都将变量 N 声明为长度为 L 的向量。
两者之间的唯一区别是第一种方式指定变量类型吗?它们可以互换使用吗?他们是否应该属于 Stan 代码的不同部分(例如,data
vs parameters
或 model
)?
感谢您的解释!
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
。
底线:您可以使用 vector
或 real
获得任何模型 运行,但它们的计算效率不一定相同。