【问题标题】:Index of minimum element using J使用 J 的最小元素的索引
【发布时间】:2021-01-19 06:20:46
【问题描述】:

在 J 中找到数组的最小元素是微不足道的:

   <./ 5 6 4 9
4

但是如何使用J找到最小元素的index呢?

(如果这是一个XY问题,我应该说我想要索引而不是值,以便我可以在其他数组中查找相应的元素。)

【问题讨论】:

  • 这个任务有special combinations;查看“排序和排序”:x ({ /:) y(i. &gt;./) y

标签: j


【解决方案1】:

我想我会用这个

ind=: I. @: (= <./) 

它以&lt;./ 开头,它返回你的最低值,它使用= 作为单子钩子的另一半。 Monadic 钩子接受 y 参数并将最右边的动词应用于它,然后左边的动词使用它作为它的右边参数,原始的 y 作为它的左边参数。所以,(= &lt;./) 5 6 4 95 6 4 9 = 4 相同,这将返回 0 0 1 0。从那里可以很简单地使用一元 I.(索引)返回值 1 的索引,当然是 2

如果有多个最小值,这也将返回多个索引。

   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

【讨论】:

  • 因为在XY问题部分提到过:如果这只是用来索引另一个相同大小的数组并且想要所有元素,= &lt;./的结果可以直接用作索引:9 4 2 1 (#~ (= &lt;./)) 5 6 4 4.
猜你喜欢
  • 2012-03-30
  • 2020-01-10
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2013-07-30
  • 1970-01-01
相关资源
最近更新 更多