eachAt(@)
New in version 1.30.21.
语法
X@index
eachAt(X, index)
参数
X 可以是一个标量、向量(常规向量/元组)、矩阵、表、字典、数据对、单目函数。
index 可以是一个布尔表达式/布尔值、向量(标量/常规向量/元组)、数据对
详情
当 index 是布尔表达式时, 返回 X 中满足于 index 为 True 的元素;否则返回以 index 为索引的元素。若 X 是函数,则 index 将作为函数的参数。
eachAt 和 at 用法类似,其不同点在于:
(1) 当 index 是元组时:
at 会将 index 的元素作为 X 每个维度的索引。例如:若 X 是一个向量组成的元组,则 index = (0, 1) 则返回 X 的第 1 个元素中下标为 1 的元素值。
eachAt,则将 index 中的每个元素都作为一维索引,返回 X 中对应 index 的元素。例如:若 X 是一个向量组成的元组,则 index = (0, 1) 则返回 X 的第 1 个元素和第 2 个元素。
(2) 当 X 是函数时:
at 既支持单目函数又支持多目函数。
eachAt 仅支持单目函数。
对不同数据形式查找的支持性见下表。
X/index | 条件表达式/布尔值 | 标量 | 常规向量 | 元组 | 数据对 |
---|---|---|---|---|---|
标量 | √ | √ | √ | √ | √ |
常规向量 | √ | √ | √ | √ | √ |
元组 | √ | √ | √ | √ | √ |
矩阵 | √ | √ | √ | √ | √ |
表 | √ | √ | √ | √ | √ |
字典 | × | √ | √ | √ | × |
数据对 | √ | √ | √ | √ | √ |
单目函数 | √ | √ | √ | √ | √ |
例子
$ v = 3.1 2.2 4.5 5.9 7.1 2.9
$ eachAt(v, v > 3)
[3.1,4.5,5.9,7.1]
$ v @ 1:3
[2.2,4.5]
$ v @ (:4)
[3.1,2.2,4.5,5.9]
$ v @ (3:)
[5.9,7.1,2.9]
// 当 index 是索引时 eachAt 和 at 的区别
$ tp = [2.3 2.1 2.2, 3.1 2.9 2.8, 5.7 6.9]
$ tp @ [1 2 3, 0 1 2]
(([3.1,2.9,2.8],[5.7,6.9],),([2.3,2.1,2.2],[3.1,2.9,2.8],[5.7,6.9]))
$ tp at [1 2 3, 0 1 2]
([3.1,2.9,2.8],[5.7,6.9,],)
$ sum @ 6 2 3 NULL 2 -3
10
// 由于 seq(..) 优先级比 @ 低,所以此处必须添加括号
$ sum @ (1..10)
55
相关函数:at