numpy删除一行中只有False或0的列和行

时间:2018-11-06 20:13:54

标签: python numpy

类似的问题,显示如何处理列remove zero lines 2-D numpy array

我正在寻找一个 一个衬里 ,该衬里可以从只有>>> classr = [] >>> >>> for rec, clsno, mem in records: ...: clsname = classes_dict.get(clsno, 'general class2') ...: if clsno[:5] == 'L-REF': ...: clsname = 'general class1' ...: classr.append((rec, clsno, mem, clsname)) >>> >>> classr >>> [('Record 1', '400002', 'Memo1', 'Class1'), ('Record 1', '400003', 'Memo1', 'general class2'), ('Record 3', '400009', 'Memo3', 'Class2'), ('Record 4', 'L-REF-96-1', 'Memo4', 'general class1'), ('Record 5', '400002', 'Memo5', 'Class1')] False的数组中删除行和列。目前,我可以按以下两行内容进行操作,并且将显示我在一行中进行的尝试。

  

考虑数组:

0
  

删除行

arr = array([[[False, False, False, False, False, False, False],
              [False, False, False, False, False, False, False],
              [False, False,  True,  True,  True, False, False],
              [False, False,  True,  True,  True, False, False],
              [False, False,  True,  True,  True, False, False],
              [False, False, False, False, False, False, False],
              [False, False, False, False, False, False, False]]])
  

删除列

arr_2 = arr[~np.all(arr == False, axis=1), :]
arr_2
array([[False, False,  True,  True,  True, False, False],
       [False, False,  True,  True,  True, False, False],
       [False, False,  True,  True,  True, False, False]])

这可以达到预期的结果。我认为这应该在一行即可。

我尝试一行

arr_3 = arr_2[:, ~np.all(arr_2 == False, axis=0)]
arr_3
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])

显然这不是理想的结果

1 个答案:

答案 0 :(得分:1)

使用np.ix_创建开放索引数组,然后索引到输入数组-

arr[np.ix_(np.any(arr, axis=1),np.any(arr, axis=0))]