eachLeft (:L)
语法
eachLeft(func, X, Y, [consistent=false])
或
X <operator>:L Y(表示 consistent 为 false)
或
X <operator>:LC Y(表示 consistent 为 true)
New in version 1.30.21.
或
func:L(X, Y, [consistent=false])
参数
func 是一个二元函数。
X 和 Y 可以是向量、矩阵、表或字典。
consistent 布尔值,默认 false,表示每个子任务输出的数据类型由实际计算结果决定。否则,每个子任务输出的数据类型将与第一个子任务输出的数据类型保持一致。 注意,若子任务输出的数据形式不一致,只能指定 consistent = false,否则会报错。
详情
把 func 应用到 X 的每个元素上,即依次执行 func(X(i),Y)。
对于向量,X(i) 为每个元素
对于矩阵,X(i) 为每一列
对于表,X(i) 为每一行
对于字典,X(i) 为字典的每一个 value
如果 func 支持向量操作,并且输入数据是一个向量,使用向量函数或运算符比使用 eachLeft 更为高效。
例子
eachLeft 作用于两个向量:
$ x = 4 3 2 1
$ y = 3 0 6;
$ x +:L y;
4 |
3 |
2 |
1 |
---|---|---|---|
7 |
6 |
5 |
4 |
4 |
3 |
2 |
1 |
10 |
9 |
8 |
7 |
$ eachLeft(pow, x, y);
4 |
3 |
2 |
1 |
---|---|---|---|
64 |
27 |
8 |
1 |
1 |
1 |
1 |
1 |
4096 |
729 |
64 |
1 |
eachLeft 作用于一个矩阵以及一个向量:
$ x=1..6$2:3;
$ x;
col1 |
col2 |
col3 |
---|---|---|
1 |
3 |
5 |
2 |
4 |
6 |
$ x ** :L 1 1;
[3,7,11]
eachLeft 作用于两个矩阵:
$ y=6..1$2:3;
$ y;
col1 |
col2 |
col3 |
---|---|---|
6 |
4 |
2 |
5 |
3 |
1 |
$ z = x **:L y;
$ z;
(#0 #1 #2
-- -- --
16 10 4
,#0 #1 #2
-- -- --
38 24 10
,#0 #1 #2
-- -- --
60 38 16
)
$ typestr z;
ANY VECTOR
eachLeft 作用于一个字典和一个向量:
$ d=dict(`a`b`c, [[1, 2, 3],[4, 5, 6], [7, 8, 9]])
$ eachLeft(add,d,10 20 30)
a->[11,22,33]
b->[14,25,36]
c->[17,28,39]