cut

Parent Previous Next


语法


cut(X, size|cutPositions)


参数


X是向量。


size是整型标量,必须满足2<=size<size(X)条件。cut函数把X分成一系列的向量,每一个向量的长度为size


cutPositions是整型向量,cut函数按照它指定的索引,把X分成一系列向量。结果中的每个向量的起始位置由cutPositions指定。cutPositions需要预先排序。


详情


将一个向量分为一系列向量。关于该函数的逆操作,参见flatten函数。


例子



>a=1..10;    


>a cut 2;

([1,2],[3,4],[5,6],[7,8],[9,10])

                   

>a cut 3;                        

([1,2,3],[4,5,6],[7,8,9],[10])  


>a cut 9;

([1,2,3,4,5,6,7,8,9],[10])


>b = a cut 2;

>b;

([1,2],[3,4],[5,6],[7,8],[9,10])


>flatten b;

(1,2,3,4,5,6,7,8,9,10)


>a cut 0 2 7;

([1,2],[3,4,5,6,7],[8,9,10])


>a cut 2 7;

([3,4,5,6,7],[8,9,10])



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;

[1,4,8]        


>incomes.date.cut(x);

([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