我需要帮助)我有NumPy数组:
False False False False
False True True False
True True True True
False True True False
False False False False
如何获取此信息(包含 True 的第一行和最后一行,并将所有元素设置为 False )?
False False False False
False False False False
True True True True
False False False False
False False False False
答案 0 :(得分:3)
arr[arr.any(axis=1).nonzero()[0][[0,-1]]] = False
工作原理:
In [19]: arr
Out[19]:
array([[False, False, False, False],
[False, True, True, False],
[ True, True, True, True],
[False, True, True, False],
[False, False, False, False]], dtype=bool)
arr.any(axis=1)
查找哪些行包含True
值:
In [20]: arr.any(axis=1)
Out[20]: array([False, True, True, True, False], dtype=bool)
nonzero
返回True
行索引的元组(每个轴一项):
In [21]: arr.any(axis=1).nonzero()
Out[21]: (array([1, 2, 3]),)
我们可以使用索引来查找包含True
值的第一行和最后一行的索引:
In [22]: arr.any(axis=1).nonzero()[0][[0,-1]]
Out[22]: array([1, 3])
最后,我们可以使用
将这些行设置为False
In [23]: arr[arr.any(axis=1).nonzero()[0][[0,-1]]] = False
In [24]: arr
Out[24]:
array([[False, False, False, False],
[False, False, False, False],
[ True, True, True, True],
[False, False, False, False],
[False, False, False, False]], dtype=bool)
答案 1 :(得分:1)
如果您仅在参考特定示例时表示“第一个和最后一个”......
如果包含True
和False
值的每一行都应设置为False
,那么您不应该限制这些行的“第一个和最后一个”,并且解决方案要容易得多。使用~a.all(1)
将告诉您哪些行不所有True
的事实,您可以使用以下内容将这些行设置为False
arr[~arr.all(1)] = False
或者,为了避免将完全False
的行冗余设置为False
,请使用 exclusive或,^
:
arr[arr.any(1) ^ arr.all(1)] = False
在某些情况下会更快。