---
source_url: https://docs.dolphindb.cn/zh/funcs/ho_funcs/cross.html
fetched_at: 2026-05-19T09:44:53Z
category: funcs
title: cross
sha1: f806a6bf3028bdadf2b7c1cca6f21e333fca431c
---

# cross

## 语法

`cross(func, X, [Y])`

或

`X <operator>:C Y`

或

`func:C(X, [Y])`

## 详情

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

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

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

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

}

}

return result;
```

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

注：

虽然同名，但与 NumPy 的 [numpy.cross](https://numpy.com.cn/doc/stable/reference/generated/numpy.cross.html) 不同，DolphinDB 的
`cross` 对两个参数的所有元素组合应用指定函数，而 `numpy.cross`
是计算两个参数（向量）的叉积。

## 参数

- **func** 是一个二元函数。
- **X** 和 **Y** 可以是数据对、向量或矩阵。X 和 Y 可以有不同的数据形式和长度或维度。
- **Y** 是一个可选参数。如果Y没有指定，将会执行cross(func, X,
  X)，其中func必须是对称二元函数，如 [corr](../c/corr.html) 函数。

## 返回值

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

## 例子

基于以下的 x 和 y 值，两个向量执行 `cross`：

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

返回：

| lable | 3 | 5 | 7 |
| --- | --- | --- | --- |
| 1 | 4 | 6 | 8 |
| 2 | 5 | 7 | 9 |

```dolphindb
cross(mul, x, y);
```

得到：

| lable | 3 | 5 | 7 |
| --- | --- | --- | --- |
| 1 | 3 | 5 | 7 |
| 2 | 6 | 10 | 14 |

```dolphindb
cross(pow, x, y);
```

得到：

| lable | 3 | 5 | 7 |
| --- | --- | --- | --- |
| 1 | 1 | 1 | 1 |
| 2 | 8 | 32 | 128 |

矩阵 m：

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

| clo1 | col2 | col3 |
| --- | --- | --- |
| 1 | 3 | 5 |
| 2 | 4 | 6 |

矩阵 n：

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

| clo1 | col2 |
| --- | --- |
| 1 | 3 |
| 2 | 4 |

对矩阵 m 和 n 执行 `cross`：

```dolphindb
cross(**, m, n);
```

得到：

| clo1 | col2 |
| --- | --- |
| 5 | 11 |
| 11 | 25 |
| 17 | 39 |

一个向量和一个矩阵执行 `cross`，返回一个矩阵：

```dolphindb
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 |

```dolphindb
b=2 4;
a topsum :C b;
```

| 2 | 4 |
| --- | --- |
| 3 | 10 |
| 15 | 34 |
| 27 | 58 |

一个向量和一个矩阵执行 `cross`，返回一个元组：

```dolphindb
x=1 2
y=1..6$2:3
cross(add, x, y);
```

返回：(([2,3],[4,5],[6,7]),([3,4],[5,6],[7,8]))

```dolphindb
x=1 2
y=1..6$3:2
cross(add, x, y);
```

返回：(([2,3,4],[5,6,7]),([3,4,5],[6,7,8]))
