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