numpy python -如果数组列至少包含一个0,则删除该列

ix0qys7i  于 2023-03-18  发布在  Python
关注(0)|答案(1)|浏览(161)

假设我有一个np.array,如:

array([[1., 1., 0., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 0.],
       [1., 1., 1., 1., 0.]])

我想知道是否有一种Python方法可以找到所有至少包含一个0的列。在本例中,我想检索索引2和4。
我需要删除这些列,但我还需要知道我删除了多少列(索引不是绝对必要的),所以最后我只需要结果

array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
uxh89sit

uxh89sit1#

如果你只想删除列,你可以使用np.all(或它的ndarray)变量来找到你想要保留的列。使用生成的布尔掩码来索引第二个轴:

>>> arr[:, arr.all(axis=0)]
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

如果你想找到那些至少有一个零的列的索引,你可以将np.anynp.nonzero结合使用(或者如果你喜欢,可以使用np.flatnonzero):

>>> np.any(arr == 0, axis=0).nonzero()
(array([2, 4], dtype=int64),)

如果你想计算它们,你可以直接对布尔掩码求和:

>>> np.any(arr == 0, axis=0).sum()
2

相关问题