eachLeft

Syntax

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

or

X <operator>:L Y (when consistent = false)

or

X <operator>:LC Y (when consistent = true)

or

func:L(X, Y) (when consistent = false)

or

func:LC(X, Y) (when consistent = true)

Arguments

func is a binary function.

X/ Y is a vector/matrix/table/array vector/dictionary.

consistent is a Boolean value. The default value is false, indicating that the data type of the result is determined by each calculation result. Otherwise, the data type of the result is the same as the data type of the first calculation result. Note that if the data forms of result are inconsistent, consistent can only be specified as false. Otherwise, an error will be reported.

Details

Calculate func(X(i),Y) for each element of X.

  • X(i) is each element when X is a vector.

  • X(i) is each column when X is a matrix.

  • X(i) is each row when X is a table.

  • X(i) is each row when X is an array vector.

  • X(i) is each value when X is a dictionary.

If func supports vector operation and the input is a vector, we should use the vector function/operator directly instead of the eachLeft template for better performance.

Examples

eachLeft with 2 vectors:

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 with a vector and a matrix:

x=1..6$2:3;
x;
col1 col2 col3
1 3 5
2 4 6
x ** :L 1 1;
// output
[3,7,11]

eachLeft with 2 matrices:

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;
ANY VECTOR

eachLeft with a dictionary and a vector:

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]