cross (:C)/pcross

语法

cross(func, X, [Y])

X <operator>:C Y

参数

func 是一个二元函数。

XY 可以是数据对、向量或矩阵。X 和 Y 可以有不同的数据形式和长度或维度。

Y 是一个可选参数。如果Y没有指定,将会执行cross(func, X, X),其中func必须是对称二元函数,如 corr 函数。

详情

将X和Y中元素的两两组合作为参数来调用函数。如果X或Y是矩阵,以列为单位遍历。以下是 cross 高阶函数的伪代码:

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

for(j:0~(size(Y)-1)){

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

}

}

return result;

假设X有m个元素或m列,Y有n个元素或n列,如果func(X[i], Y[j])是标量,将返回一个m×n矩阵,如果func(X[i], Y[j])是向量,将返回一个长度为m的元组,每个元素是一个长度为n的元组。

pcross 是并行计算版本的 corss 高阶函数。

例子

两个向量执行 cross

$ x=1 2;
$ y=3 5 7;
$ x+:C y;

lable

3

5

7

1

4

6

8

2

5

7

9

$ cross(mul, x, y);

lable

3

5

7

1

3

5

7

2

6

10

14

$ cross(pow, x, y);

lable

3

5

7

1

1

1

1

2

8

32

128

两个矩阵执行 cross

$ m = 1..6$2:3;
$ m;

clo1

col2

col3

1

3

5

2

4

6

$ n=1..4$2:2;
$ n;

clo1

col2

1

3

2

4

$ cross(**, m, n);

clo1

col2

5

11

11

25

17

39

一个向量和一个矩阵执行 cross,返回的结果是一个矩阵:

$ def topsum(x,n){return sum x[0:n]};
$ a=1..18$6:3;
$ a;

clo1

col2

col3

1

7

13

2

8

14

3

9

15

4

10

16

5

11

17

6

12

18

$ b=2 4;
$ a topsum :C b;

2

4

3

10

15

34

27

58

一个向量和一个矩阵执行 cross,返回的结果是一个元组:

$ x=1 2
$ y=1..6$2:3
$ cross(add, x, y);
(([2,3],[4,5],[6,7]),([3,4],[5,6],[7,8]))

$ x=1 2
$ y=1..6$3:2
$ cross(add, x, y);
(([2,3,4],[5,6,7]),([3,4,5],[6,7,8]))