at
语法
at(X, [index])
参数
如果只指定了一个参数,X 是布尔表达式或向量。
如果指定了两个参数,X 可以是一个标量、向量(常规向量/元组)、矩阵、表、字典、数据对、函数。index 可以是一个布尔表达式/布尔值、标量、向量(常规向量/元组)、数据对。
详情
在第一种情况下,函数返回 X 中结果为 true 的元素位置。
在第二种情况下:
如果 index 是布尔表达式,
at
函数返回 X 中 index 为 true 的位置的元素。at
函数等价于中括号运算符 []. 比如,”X.at(X>3)” 和 “X[X>3]” 相同。如果 index 是向量,以向量中的值作为索引值,寻找 X 中该索引位置的值并返回。
如果 index 是元组,则元组的元素作为 X 每个维度的索引,寻找 X 中该索引位置的值并返回。
如果 index 是数据对,如 a:b, 则表示索引范围为 [a,b),寻找 X 中该范围的值并返回。
请注意,index 作为索引值或索引范围时,若其值不在 [0, size(X)-1] 内,则超出 [0, size(X)-1] 的值所对应的位置返回空值。
若 X 是函数,则 index 将作为函数的参数。
例子
$ x=5 7 0 4 2 3
$ at(x>3)
[0, 1, 3]
// 在位置 0, 1 和 3,x>3 为 true
// 和 x>3 相比
$ x>3;
[1, 1, 0, 1, 0, 0]
$ x[x>3]
[5, 7, 4]
$ x at x>3
[5, 7, 4]
$ x=5 7 0 0 0 3
$ at(x==0)
[2, 3, 4]
$ x[x==0]
[0, 0, 0]
$ shares=500 1000 1000 600 2000
$ prices=25.5 97.5 19.2 38.4 101.5
$ prices[shares>800]
[97.5, 19.2, 101.5]
$ prices at shares>800
[97.5, 19.2, 101.5]
$ m=(1..6).reshape(2:3)
$ m;
0 |
1 |
2 |
---|---|---|
1 |
3 |
5 |
2 |
4 |
6 |
$ at(m>3)
[3,4,5]
$ m[m>3] // 等价于 m at m>3
col1 |
col2 |
col3 |
---|---|---|
5 |
||
4 |
6 |
注意区分 index 是向量和元组的两种不同场景:
$ m at [0,2] // 选择第 0 列和第 2 列
0 |
1 |
---|---|
1 |
5 |
2 |
6 |
$ m at (0,2) // 查找特定行列的元素
5
$ m at 0:2 // 选择第 0 列和第 1 列
0 |
1 |
---|---|
1 |
3 |
2 |
4 |
若 X 是函数:
$ (sum)[1..10]
55
$ (corr)[1 3 -1, 2 3 4]
-0.5000