take

语法

take(X, n)

参数

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

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

详情

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

如果 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);
// output
[10,10,10,10,10]

x=`IBM`C`AAPL`BABA;
take(x,10);
// output
["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);
// output
[3,5,4]


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

take(1 2 3, 10);
// output
[1,2,3,1,2,3,1,2,3,1]


take(1,10);
// output
[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;
// output
[]

typestr x;
// output
FAST INT VECTOR


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

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

take(1..3,2 0 2)
// output
[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