【发布时间】: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()。