reduce (:T)

语法

reduce(func, X, [init])

[init] <operator>:T X

参数

func 是一个二元函数。

X 可以是向量、矩阵或表。当X是向量时,init必须是标量;当X是矩阵时,init必须是向量;当X是表时,init必须是字典;当init未指定时,reduce 使用X的第一个元素作为中间结果的第一个元素。

详情

reduce 高阶函数先将函数/运算符运用在init和X[0]上,再迭代地应用到前一个结果和X中的下一个元素上。与 accumulate 返回中间结果不同,reduce 只返回最后一个结果。reduce 等同于下面的伪代码的执行过程:

result=<function>(init,X[0]);

for(i:1~size(X)){

result=<function>(result, X[i]);

}

return result;

例子

在一个向量上执行 reduce

$ reduce(mul, 1..10);
3628800
// 10的阶乘

// 上例相应的accumulate 高阶函数实现。
$ *:A 1..10;
[1,2,6,24,120,720,5040,40320,362880,3628800]

$ 2 *:T 1..10;
7257600

$ def f1(a,b):a+log(b);
$ reduce(f1, 1..5, 0);
4.787492

对一个矩阵执行 reduce

$ x=1..12$3:4;
$ x;

col1

col2

col3

col4

1

4

7

10

2

5

8

11

3

6

9

12

$ + :T x;
[22,26,30]