---
source_url: https://docs.dolphindb.cn/zh/funcs/c/cut.html
fetched_at: 2026-05-19T09:18:05Z
category: funcs
title: cut
sha1: 48a2481d7a55574e3eb5de67c94ef0d269339198
---

# cut

## 语法

`cut(X, size|cutPositions)`

## 详情

将 *X* 分为一系列标量、向量、矩阵（按列）或表（按行）。

- 当 *X* 是标量时：第二个参数只能是 *size*，且 *size* 值只能为1，cut 函数返回由 *X*
  组成的元组。
- 当 *X* 是向量时：

  - 若第二个参数为 *size*：cut 函数把 *X* 分成一系列长度为 *size*
    的标量（*size* =1时）或向量（*size* >1时）。
  - 若第二个参数为 *cutPositions*，cut 函数先根据 *cutPositions* 将 *X*
    分段，然后返回每段子向量组成的元组。
- 当 *X* 是矩阵（表）时：

  - 若第二个参数为 *size*：cut 函数把 *X* 分成一系列列数（行数）为 *size*
    的矩阵（表）。
  - 若第二个参数为 *cutPositions*，cut 函数先根据 *cutPositions* 将 *X*
    分段，然后返回每个子矩阵（子表）组成的元组。

关于该函数的逆操作，参见 [flatten](../f/flatten.html) 函数。

注：

虽然同名，但与 Pandas 的 [pandas.cut](https://pandas.ac.cn/docs/reference/api/pandas.cut.html) 不同。DolphinDB 的 `cut`
用于切分数据结构，且不支持 `pandas.cut` 中的
*right*、*labels*、*retbins* 等参数；而 `pandas.cut`
用于数值分箱分类。

|  | DolphinDB `cut` | `pandas.cut` |
| --- | --- | --- |
| 作用 | 将数据结构物理切分成多段 | 将数值数据逻辑分类到不同区间 |
| 参数 *X* / *x* | 标量/向量 | 一维数组（类数组对象） |
| 参数 *size* / *bins*(int) | 每段包含的元素个数 | 要分成的区间数量 |
| 参数 *cutPositions* / *bins*(序列) | 切分的索引位置（从0开始） | 数值区间的边界值 |

## 参数

**X** 是标量/向量。

**size** 是整型标量，必须满足 0<*size*<=*size*(*X*) 条件。

**cutPositions** 是单增的整型向量，用于指定切分段开始的索引。

## 例子

```dolphindb
a=1..10;
cut(a,2);
// output
([1,2],[3,4],[5,6],[7,8],[9,10])

cut(a,3);
// output
([1,2,3],[4,5,6],[7,8,9],[10])

cut(a,9);
// output
([1,2,3,4,5,6,7,8,9],[10])

b = cut(a,2);
b;
// output
([1,2],[3,4],[5,6],[7,8],[9,10])

flatten b;
// output
(1,2,3,4,5,6,7,8,9,10)

cut(a, 0 2 7);
// output
([1,2],[3,4,5,6,7],[8,9,10])

cut(a, 2 7);
// output
([3,4,5,6,7],[8,9,10])

m=matrix(1 5 9, 12 20 23, 25 29 32)
cut(m,2)
// output

(#0 #1
-- --
1  12
5  20
9  23
,#0
--
25
29
32
)

cut(m, 1 2)
// output
(#0
--
12
20
23
,#0
--
25
29
32
)
```

`cut` 函数在时间数据分析中是一个方便的工具。在下面的例子中，我们用
`cut` 函数计算两个事件发生期间的收入和。

```dolphindb
incomes=table(2016.07.31 - 10..1 as date, rand(100,10) as income);
incomes;
```

| date | income |
| --- | --- |
| 2016.07.21 | 78 |
| 2016.07.22 | 61 |
| 2016.07.23 | 79 |
| 2016.07.24 | 15 |
| 2016.07.25 | 78 |
| 2016.07.26 | 22 |
| 2016.07.27 | 30 |
| 2016.07.28 | 81 |
| 2016.07.29 | 17 |
| 2016.07.30 | 52 |

```dolphindb
eventdates = [2016.07.22, 2016.07.25, 2016.07.29];

x = incomes.date.binsrch(eventdates);
x;
// output
[1,4,8]

incomes.date.cut(x);
// output
([2016.07.22,2016.07.23,2016.07.24],[2016.07.25,2016.07.26,2016.07.27,2016.07.28],[2016.07.29,2016.07.30])

table(eventdates as startDate, each(last,incomes.date.cut(x)) as endDate, each(sum,incomes.income.cut(x)) as incomeSum);
```

| startDate | endDate | incomeSum |
| --- | --- | --- |
| 2016.07.22 | 2016.07.24 | 155 |
| 2016.07.25 | 2016.07.28 | 211 |
| 2016.07.29 | 2016.07.30 | 69 |
