使用 J 的最小元素索引
Index of minimum element using J
在 J 中,找到数组的最小元素很简单:
<./ 5 6 4 9
4
但是如何用J求最小元素的index呢?
(如果这是一个XY问题,我应该说我想要索引而不是值,这样我就可以在其他数组中查找相应的元素。)
我想我会用这个
ind=: I. @: (= <./)
它以 <./
开始,return 是您的最低值,它使用 =
作为 monadic 钩子的另一半。 Monadic 钩子接受 y
参数并将最右边的动词应用于它,然后左边的动词使用它作为它的右边参数,原始的 y
作为它的左边参数。因此,(= <./) 5 6 4 9
与 5 6 4 9 = 4
和此 return 相同 0 0 1 0
。从那里可以很简单地使用 monadic I.
(索引)到 return 值 1
的索引,当然是 2
.
如果最小值不止一个,这也会 return 多个索引。
ind 5 6 4 9 4
2 4
如果您只想要第一个或最后一个值,您可以使用包含 i.
(索引)或 i:
(最后一个索引)的更简单的单子钩子:
indfirst =: i. <./
indfirst 5 6 4 9 4
2
indlast =: i: <./
indlast 5 6 4 9 4
4
另一种选择是采用对列表进行排序的排列的第一个元素:{.@/:
。这具有不仅适用于列表而且适用于任意数组的优点,并为您提供字典顺序最少的项目的索引。
在 J 中,找到数组的最小元素很简单:
<./ 5 6 4 9
4
但是如何用J求最小元素的index呢?
(如果这是一个XY问题,我应该说我想要索引而不是值,这样我就可以在其他数组中查找相应的元素。)
我想我会用这个
ind=: I. @: (= <./)
它以 <./
开始,return 是您的最低值,它使用 =
作为 monadic 钩子的另一半。 Monadic 钩子接受 y
参数并将最右边的动词应用于它,然后左边的动词使用它作为它的右边参数,原始的 y
作为它的左边参数。因此,(= <./) 5 6 4 9
与 5 6 4 9 = 4
和此 return 相同 0 0 1 0
。从那里可以很简单地使用 monadic I.
(索引)到 return 值 1
的索引,当然是 2
.
如果最小值不止一个,这也会 return 多个索引。
ind 5 6 4 9 4
2 4
如果您只想要第一个或最后一个值,您可以使用包含 i.
(索引)或 i:
(最后一个索引)的更简单的单子钩子:
indfirst =: i. <./
indfirst 5 6 4 9 4
2
indlast =: i: <./
indlast 5 6 4 9 4
4
另一种选择是采用对列表进行排序的排列的第一个元素:{.@/:
。这具有不仅适用于列表而且适用于任意数组的优点,并为您提供字典顺序最少的项目的索引。