rowAt

New in version 2.00.7.

语法

rowAt(X, [Y])

row 系列函数通用参数说明和计算规则请参考: 行计算系列(row 系列)

参数

X 矩阵或数组向量。

Y Y 整型向量、布尔型矩阵、整型或布尔型数组向量。

详情

  • Y 是整型向量,Y 的每个元素表示 X 每行的列索引,逐行取出 X 中对应索引的元素,返回一个与 Y 长度相同的向量。若索引无对应元素或索引值超出 X 的有效索引范围,则返回空值。

  • Y 是布尔类型的矩阵或数组向量,则取出 X 对应于 Y 中 true 值的元素,返回一个与 Y 行数相同的数组向量。若 Y 中某一行的所有元素值都是 false,则该行返回空值。

  • Y 是整型数组向量,Y 的每个元素表示 X 每行的列索引,逐行取出 X 中对应索引的元素,返回一个与 Y 维度相同的数组向量。若索引无对应元素或索引值超出 X 的有效索引范围,则返回空值。

  • Y 不指定,X 必须是布尔类型的矩阵或数组向量。该函数逐行取出 X 中元素值是 true 的索引。返回一个整型数组向量,其行数和 X 的行数相同。若 X 中某一行的所有元素值都是空值或 false,则该行返回空值。

例子

$ m = matrix(3.1 4.5 2.2, 4.2 4.3 5.1, 6.2 7.1 2.2, 1.8 6.1 5.3, 7.1 8.4 3.5)
$ index = 4 0 2
$ rowAt(m, index)
[7.1,4.5,2.2]

$ index = array(INT[], 0, 10).append!([0 1, 2 4, 3 4 5])
$ rowAt(m, index)
[[3.1,4.2],[7.1,8.4],[5.3,3.5,]]

$ x = array(DOUBLE[], 0, 10).append!([3.3 3.6 3.8, 3.7 3.4 3.5, 3.4 3.4 3.5])
$ index = array(INT[], 0, 10).append!([0 1, 2, 0 2])
$ rowAt(x, index)
[[3.3,3.6],[3.5],[3.4,3.5]]

$ trades = table(10:0,`time`sym`p1`p2`p3`p4`p5`vol1`vol2`vol3`vol4`vol5,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,INT,INT,INT,INT,INT])
$ insert into trades values(2022.01.01T09:00:00, `A, 33.2, 33.8, 33.6, 33.3, 33.1, 200, 180, 180, 220, 200)
$ insert into trades values(2022.01.01T09:00:00, `A, 33.1, 32.8, 33.2, 34.3, 32.3, 150, 280, 190, 100, 220)
$ insert into trades values(2022.01.01T09:00:00, `A, 31.2, 32.6, 33.6, 35.3, 34.5, 220, 160, 130, 100, 110)
$ insert into trades values(2022.01.01T09:00:00, `A, 30.2, 32.5, 33.6, 35.3, 34.1, 200, 180, 150, 140, 120)
$ insert into trades values(2022.01.01T09:00:00, `A, 33.2, 33.8, 33.6, 33.3, 33.1, 180, 160, 160, 180, 200)
$ select rowAt(matrix(p1, p2, p3, p4, p5), rowImin(vol1, vol2, vol3, vol4, vol5)) as price1, rowAt(matrix(p1, p2, p3, p4, p5), rowImax(vol1, vol2, vol3, vol4, vol5)) as price2 from trades

price1

price2

33.8

33.3

34.3

32.8

35.3

31.2

34.1

30.2

33.8

33.1

2.00.10.2 及以上版本,当 X 是布尔类型矩阵或数组向量时,Y 可以不指定,此时 rowAt 返回每行中 true 元素的索引。

$ m = matrix(true false false, false true false, true true false)
$ R=rowAt(m)
$ R
[[0,2],[1,2],]
$ typestr(R)  //FAST INT[] VECTOR

$ m = matrix(3.1 4.5 2.2, 2.2 4.3 5.1, 1.2 7.1 2.2, 1.8 6.1 5.3, 1 4 3)
$ rowAt(m, m>4)
[,[4.5,4.3,7.1,6.1],[5.1,5.3]]

$ x = array(DOUBLE[], 0, 10).append!([3.3 3.6 3.8, 3.7 3.4 3.5, 3.4 3.4 3.5])
$ rowAt(x, x>3.5)
[[3.6,3.8],[3.7],]

相关函数: at