slice

语法

slice(obj, index)

slice(obj, rowIndex, [colIndex])

相当于obj[index]或obj[rowIndex, colIndex]

参数

New in version 2.00.9.7: obj 参数支持数组向量

obj 可以是数组向量、矩阵或表。

index, rowIndexcolIndex 可以是标量、向量或数据对,表示行或列的下标。如果 index, rowIndexcolIndex 为数据对,那么它表示下标的范围,上边界不包含在内。

详情

对于第一种用法:

  • 如果obj是一个数组向量,

    • index是标量,返回指定的列,用向量表示。

    • index是向量,返回指定行组成的数组向量。

    • index是数据对,返回指定列组成的数组向量。

  • 如果obj是一个矩阵,

    • index是标量,返回指定的列,用向量表示。

    • index是向量或数据对,返回指定列组成的子矩阵。

  • 如果obj是一个表,

    • index是标量,返回指定的行,用字典表示。

    • index是向量或数据对,返回指定行组成的子表。

对于第二种用法:

  • 如果obj是一个数组向量,

    • rowIndex和colIndex都是标量,返回指向行列的值,用向量表示。

    • rowIndex是标量,colIndex是数据对,返回由指定行列组成的数组向量。

    • rowIndex是数据对,colIndex是标量,返回由指定行列组成的向量。

    • rowIndex和colIndex都是数据对,返回由指定行列组成的数组向量。

  • 如果obj是一个矩阵,

    • rowIndex和colIndex都是标量,返回指定行列的值,用标量表示。

    • rowIndex和colIndex中一个是标量,另一个是数据对,返回由指定行列组成的子矩阵。

    • rowIndex和colIndex都是向量或数据对,返回指定行列组成的子矩阵。

  • 如果obj是一个表,

    • rowIndex和colIndex都是标量,返回指定行列的值,用标量表示。

    • rowIndex和colIndex中一个是标量,另一个是数据对,返回指定行列组成的子表。

    • rowIndex和colIndex都是向量或数据对,返回指定行列组成的子表。

请注意,index, rowIndex,collIndex 作为数组向量或矩阵的索引值或索引范围时,若其值不在 [0, size(X)-1] 内,则超出 [0, size(X)-1] 的值所对应的位置返回空值。

例子

例1. 矩阵

$ m=1..9$3:3
m.slice(0);
[1,2,3]

$ m.slice([0]);

#0

1

2

3

$ m.slice(0:2);

#0

#1

1

4

2

5

3

6

$ m.slice(0 2);

#0

#1

1

7

2

8

3

9

$ m.slice(0,1);
4

$ m.slice(0 1,0 1);

#0

#1

1

4

2

5

$ m.slice(1:2,1:2);

#0

5

例2. 表

$ t=table(`A`B`C as sym,2018.01.01..2018.01.03 as date,10 48 5 as val)
t.slice(0);
val->10
date->2018.01.01
sym->A
t.slice([0]);

sym

date

val

A

2018.01.01

10

$ t.slice(0 1);

sym

date

val

A

2018.01.01

10

B

2018.01.02

48

$ t.slice(0:1);

sym

date

val

A

2018.01.01

10

$ t.slice(0,1);
2018.01.01

$ t.slice(0 1,0 1);

sym

date

A

2018.01.01

B

2018.01.02

$ t.slice(1:2,1:2);

date

2018.01.02

例3. 数组向量

$ av =array(DOUBLE[], 0, 10).append!([1.0, 2.1 4.1 6.8, 0.5 2.2 2]);
$ av[1]
[,4.1,2.2]
$ av[1,1]
[4.1]
$ av[1:3,1:3]
[[4.1,6.8],[2.2,2]]