eachAt(@)

语法

  • 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