如何用Python一次性移除numpy数组中的全零行和全零列?
如何用一行代码移除NumPy数组中的全零行和全零列?
我需要用一行代码从NumPy数组A1中同时移除所有全零行和全零列,但目前的代码只能移除全零列,输出里还保留着全零行,求正确的实现方式。
当前代码
import numpy as np A1 = np.array([[0,0,0,0], [1,0,2,0], [0,0,0,0], [3,0,4,0]]) # 仅移除全零列的代码 result = A1[:, ~(A1 == 0).all(axis=0)]
当前输出
array([[0, 0], [1, 2], [0, 0], [3, 4]])
期望输出
array([[1, 2], [3, 4]])
解决方案
可以通过先筛选非全零行,再筛选非全零列的方式实现一行代码解决:
result = A1[~(A1 == 0).all(axis=1)][:, ~(A1 == 0).all(axis=0)]
或者用any判断非零元素的写法,逻辑更直观:
result = A1[(A1 != 0).any(axis=1)][:, (A1 != 0).any(axis=0)]
原理说明
(A1 == 0).all(axis=1):返回布尔数组标记全零行,取反~后得到需保留的行掩码(A1 == 0).all(axis=0):返回布尔数组标记全零列,取反后得到需保留的列掩码- 先按行掩码筛选非全零行,再按列掩码筛选非全零列,即可同时移除两类无效行列
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

