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]