在 J 中使用向量/矩阵时打印值及其关联索引



如果我想检查向量或矩阵中有多少值小于给定值我可以使用+/(a<20(。但如果我想知道具体的值和它的指数呢。类似于(2(值(5(索引((的表。我看了看I,I:(给出第一个和最后一个位置(和I。排序第一有帮助吗?

J中一个非常常见的模式是从过滤器创建掩码,并对钩子或叉中的掩码数据应用操作和/或使用掩码数据:

((actions) (filter)) (data)

例如:

NB. Random array
a =: ? 20 $ 10
6 3 9 0 3 3 0 6 2 9 2 4 6 8 7 4 6 1 7 1
NB. Filter and mask
f =: 5 < ]
m =: f a
1 0 1 0 0 0 0 1 0 1 0 0 1 1 1 0 1 0 1 0
NB. Values of a on m
m # a
6 9 6 9 6 8 7 6 7
NB. Indices of a on m
I. m
0 2 7 9 12 13 14 16 18
NB. Joint results
(I.m) ,: (m # a)
0 2 7 9 12 13 14 16 18
6 9 6 9  6  8  7  6  7

换句话说,在这种情况下,m&#f作用于aI.作用于m。请注意,通过转换副本#~:的参数,可以从单独对m的操作中导出最终结果

(I. ,: (a #~ ]) m
0 2 7 9 12 13 14 16 18
6 9 6 9  6  8  7  6  7

并且CCD_ 8可以从对CCD_

a ( (]I.) ,: (#~ ])) m

但由于m本身是从a上的一个动作(f(派生而来的,我们可以写:

a ( (]I.) ,: (#~ ])) (f a)

是一个简单的一元钩子CCD_ 13→(v f) y

因此:

action =: (]I.) ,: (#~ ])
filter =: 5 < ]
data =: a
(action filter) data
0 2 7 9 12 13 14 16 18
6 9 6 9  6  8  7  6  7

最新更新