take

语法

take(X, n)

参数

X 可以是标量、向量、元组、矩阵或表。

n 是一个整数标量或向量。

详情

如果 X 是标量,则 n 必须是标量,返回由 n 个 X 组成的向量。

如果 X 是向量/元组:

  • n 是标量:从 X 中循环地依次取值,共取 n 个值。结果是一个向量。n 是正数时,从左到右取数,n 是负数时,从右到左取数。

  • n 是向量:n 的长度必须和 X 相同。从 X 中依次取出 n[i] 个 X[i]。当 n[i] <=0 时,不会取 X[i]。结果是一个向量。

如果 X 是矩阵/表:

  • n 是标量:从 X 中循环地依次逐行取值,共取 n 行。结果是一个矩阵/表。n 是正数时,从上到下取数,n 是负数时,则从下到上取数。

  • n 是向量:n 的长度必须和 X 的行数相同。从 X 中依次取出 n[i] 个第 i 行的元素。当 n[i] <=0 时,不会取第 i 行元素。结果是一个矩阵/表。

例子

$ take(10,5);
[10,10,10,10,10]

$ x=`IBM`C`AAPL`BABA;
$ take(x,10);
["IBM","C","AAPL","BABA","IBM","C","AAPL","BABA","IBM","C"]
// sequentially and iteratively take 10 elements from vector x

$ x=3 5 4 6 9;
$ take(x,3);
[3,5,4]


$ x=1..3;
$ x.take(10);
[1,2,3,1,2,3,1,2,3,1]

$ take(1 2 3, 10);
[1,2,3,1,2,3,1,2,3,1]


$ take(1,10);
[1,1,1,1,1,1,1,1,1,1]
// an efficient way to generate a vector with default values.


$ x=take(1,0);
// return an empty INT VECTOR

$ x;
[]

$ typestr x;
FAST INT VECTOR


$ x=1..12$3:4;
$ take(x,2);
[1,2]

$ take(x,-2);
[11,12]

$ take(1..3,2 0 2)
[1,1,3,3]

$ m=matrix(1 2 3, 4 5 6)
$ take(m,5)
col1        col2
1   4
2   5
3   6
1   4
2   5

$ take(m, 0 2 1)
col1        col2
2   5
2   5
3   6

$ t=table(1 2 3 as a, 4 5 6 as b)
$ take(t,-4)
a   b
3   6
1   4
2   5
3   6

$ take(t, -2 2 1)
a   b
2   5
2   5
3   6