cut
语法
cut(X, size|cutPositions)
参数
X 是标量/向量。
size 是整型标量,必须满足 0<size<=size(X) 条件。
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 函数。
例子
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
函数计算两个事件发生期间的收入和。
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 |
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 |