如果我想检查向量或矩阵中有多少个值小于给定值 我可以使用 +/(a < 20)。但是如果我想知 Prop 体值及其索引怎么办? 像 (2(value) 5(index)) 这样的表。我查看了 i.、i:(给出第一个和最后一个位置)和 I。首先排序有帮助吗?
最佳答案
J 中一个非常常见的模式是从过滤器创建掩码,并在钩子(Hook)或 fork 中对掩码数据应用操作和/或使用掩码数据:
((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
作用于 a
和 I。
作用于m
。请注意,最终结果可以通过对 copy #~
的参数进行交换来单独对 m
执行操作得出:
(I. ,: (a #~ ]) m
0 2 7 9 12 13 14 16 18
6 9 6 9 6 8 7 6 7
和 a
可以从 m
上的操作中取出,如下所示:
a ( (]I.) ,: (#~ ])) m
但是由于 m
本身是从 a
上的操作 (f
) 派生的,我们可以这样写:
a ( (]I.) ,: (#~ ])) (f a)
这是一个简单的单子(monad)钩子(Hook) y v (f y)
→ (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
关于search - 在 J 中使用向量/矩阵时打印值及其关联索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65068832/