【问题标题】:Tricky numpy argmax on last dimension of 3-dimensional ndarray3维ndarray最后一维的棘手numpy argmax
【发布时间】:2018-01-20 19:22:15
【问题描述】:

如果有一个形状数组 (9,1,3)。

array([[[  6,  12, 108]],

   [[122, 112,  38]],

   [[ 57, 101,  62]],

   [[119,  76, 177]],

   [[ 46,  62,   2]],

   [[127,  61, 155]],

   [[  5,   6, 151]],

   [[  5,   8, 185]],

   [[109, 167,  33]]])

我想找到第三维的 argmax 索引,在本例中为 185,因此索引为 7。

我想解决方案与重塑有关,但我无法理解它。感谢您的帮助!

【问题讨论】:

  • 听起来更像你想要的np.argmax(yourarray[:, 0, 2])
  • 说“第三维的argmax索引”真的没有多大意义。您可以要求 argmax 的第三个坐标(将是 2,而不是 7)或第一个坐标,即 7,或者在取 [:, 0, 2] 之后切片数组的 argmax(如 PP 建议的那样,这确实是 7)。
  • 我不明白为什么每个项目都是单例列表,这似乎是一个糟糕的建模。
  • @PaulPanzer np.argmax(np.max(arr, 2)) 怎么样?
  • @kmario23 还是np.unravel_index(np.argmax(arr), arr.shape)?任何导致包含 7 的东西。

标签: python arrays numpy argmax


【解决方案1】:

您可能必须这样做:

data = np.array([[[  6,  12, 108]],

   [[122, 112,  38]],

   [[ 57, 101,  62]],

   [[119,  76, 177]],

   [[ 46,  62,   2]],

   [[127,  61, 155]],

   [[  5,   6, 151]],

   [[  5,   8, 185]],

   [[109, 167,  33]]])

np.argmax(data[:,0][:,2])
 7

【讨论】:

  • data[:, 0][:, 2] 是什么?请只做data[:, 0, 2],而不是创建一个不必要的中间。
  • 是的,非常好。但是你传播这种草率并没有帮助。
【解决方案2】:

我不确定它有什么棘手之处。但是,获取沿最后一个轴的最大元素的索引的一种方法是使用np.maxnp.argmax,例如:

# find `max` element along last axis 
# and get the index using `argmax` where `arr` is your array
In [53]: np.argmax(np.max(arr, axis=2))
Out[53]: 7

或者,作为@PaulPanzer suggested in his comments,您可以使用:

In [63]: np.unravel_index(np.argmax(arr), arr.shape)
Out[63]: (7, 0, 2)

In [64]: arr[(7, 0, 2)]
Out[64]: 185

【讨论】:

  • 哦,请不要宣传我的一次性 cmets ;-) 或者,如果您必须使用另一个;我觉得这样更好。
  • 谢谢,技巧是相对的,到目前为止我还没有花太多时间在 np 上,尽管我将来会这样做。
  • @TshoshHarris 当然!但是,您不必明确表示感谢。如果对您有帮助,点赞答案就足够了。
  • @kmario23 你是对的,我也是,但你必须达到 15 Rep 才能看到它;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多