eachLeft

语法

eachLeft(func, X, Y, [consistent=false])

func:L(X, Y)(表示 consistent 为 false)

func:LC(X, Y)(表示 consistent 为 true)

X <operator>:L Y(表示 consistent 为 false)

X <operator>:LC Y(表示 consistent 为 true)

参数

  • func 是一个二元函数。
  • XY 可以是向量、矩阵、表、数组向量或字典。
  • consistent 布尔值,默认 false,表示每个子任务输出的数据类型由实际计算结果决定。否则,每个子任务输出的数据类型将与第一个子任务输出的数据类型保持一致。
    注: 若子任务输出的数据形式不一致,只能指定 consistent = false,否则会报错。

详情

把 func 应用到 X 的每个元素上,即依次执行 func(X(i),Y)。

  • 对于向量,X(i) 为每个元素

  • 对于矩阵,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;
# output
[3,7,11]

eachLeft 作用于两个矩阵:

y=6..1$2:3;
y;
col1 col2 col3
6 4 2
5 3 1
z = x **:L y;
z;

# output
(#0 #1 #2
-- -- --
16 10 4
,#0 #1 #2
-- -- --
38 24 10
,#0 #1 #2
-- -- --
60 38 16
)
typestr z;
# output
ANY VECTOR

eachLeft 作用于一个字典和一个向量:

d=dict(`a`b`c, [[1, 2, 3],[4, 5, 6], [7, 8, 9]])
eachLeft(add,d,10 20 30)
# output
a->[11,22,33]
b->[14,25,36]
c->[17,28,39]