【问题标题】:One liner to get an array of positions form NUMPY array in python一个从python中的NUMPY数组获取位置数组的衬垫
【发布时间】:2020-05-27 15:48:13
【问题描述】:

我有以下名为 histarr 的 numpy 数组,形状为 1, 13

array([0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], dtype=uint32)

我想得到一个数组,它给我 1 的位置,因此我使用了 np.where

where_are_ones_arr = np.where(histarr == 1)

输出是:

(array([1, 2, 4, 5, 6], dtype=int32),)

我困惑了一会儿,但检查了类型之后,我意识到where_are_ones_arr 不是一个数组,但它实际上是一个元组,所以如果我想得到一个我使用的数组:

where_are_ones_arr[0]

结果:

array([1, 2, 4, 5, 6], dtype=int32)

现在一切都很好,但我发现我无法在一行中得到它,所以我环顾四周并尝试了:

where_are_ones_give_me_only_array = histarr[np.where(histarr == 1)]

但它会吐出来:

array([1, 1, 1, 1, 1], dtype=uint32)

哪些不是我想要的,我可以解释什么? 我没有得到什么?

【问题讨论】:

  • np.where(histarr == 1)[0]np.flatnonzero(histarr == 1)?
  • 感谢 Divakar,这行得通。 @StupidWolf我读了这个答案,paulj line 280的一个答案,他使用我试图在我的问题中重现的技术对我不起作用。
  • 我仍然不明白我如何得到我在问题中得到的结果。
  • 另外:只有一个参数的np.where() 只是在后台调用np.nonzero(),因此应该首选直接调用np.nonzero()

标签: python arrays numpy


【解决方案1】:

你应该可以在一行中完成:

np.where(histarr == 1)[0]

【讨论】:

  • 感谢它现在神奇地工作。我之前尝试过,但出现了一些我无法再重现的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多