原文:23.2 Map-rect | Stan User’s Guide
Map-reduce可以把大型运算分成模块计算然后合并。
map函数可以将一个函数应用到一个集合的各成员上,然后返回一个结果集合。如:mapover the vector[3,5,10] produces the vector [9,25,100]。
map的输出常常被传给一个reduction函数。
reduction函数收到一个任意长度的序列然后返回一个输出,如求和或排序。
Map函数签名
vector map_rect((vector, vector, real[], int[]):vector f,
vector phi, vector[] thetas,
data real[ , ] x_rs, data int[ , ] x_is);
- 后缀 _rect 表示函数的参数的数据结构是 rectangular。对于ragged inputs, ragged inputs must be padded out to rectangular form.
- 数组theta是f的参数;x_rs是实值数据,x_is是整数值数据,后缀s表示数据结构是数组,它们的值必须来自data block或transformed data block。这些数组将会并行的传给f,所以必须有相同的size。
- phi的值将会重复用在并行中。
- (vector, vector, real[], int[]):vector 规定了f的函数签名
vector f(vector phi, vector theta,
data real[] x_r, data int[] x_i);
map_rect语义
map_rect(f, phi, thetas, xs, ns)
= f(phi, thetas[1], xs[1], ns[1]) . f(phi, thetas[2], xs[2], ns[2]) . ... . f(phi, thetas[N], xs[N], ns[N])
其中‘.’表示连接。每个f的返回为一个vector,连接N个vector成为一个vector。