类似的问题,显示如何处理列或行: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]])
显然这不是理想的结果
答案 0 :(得分:1)
使用np.ix_
创建开放索引数组,然后索引到输入数组-
arr[np.ix_(np.any(arr, axis=1),np.any(arr, axis=0))]