对于{d {1}},第1天有numpy.trim_zeros
。我可以使用numpy.ndarray
或numpy
中的哪一种方法来修剪2d数组的零?
scipy
我想要得到的结果:
>>> import numpy as np
>>> a = np.array([[0, 0, 0, 0], [4, 1, 2, 0], [0, 3, 6, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
>>> a
array([[0, 0, 0, 0],
[4, 1, 2, 0],
[0, 3, 6, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
答案 0 :(得分:2)
您可以尝试使用某些numpy
方法进行列表理解:
>>> np.array([sub[~(sub == 0)].tolist() for sub in a if sub[sub != 0].tolist()])
array([[4, 1, 2], [3, 6]], dtype=object)
>>>
答案 1 :(得分:1)
我将搜索最左,最右,最顶和最底非零的位置,然后按以下方式对该数组进行切片:
import numpy as np
a = np.array([[0, 0, 0, 0], [4, 1, 2, 0], [0, 3, 6, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
nzero = np.nonzero(a)
top,bottom = np.min(nzero[0]),np.max(nzero[1])
left,right = np.min(nzero[1]),np.max(nzero[1])
out = a[top:bottom+1,left:right+1] # +1 as second argument is exclusive
print(out)
输出:
[[4 1 2]
[0 3 6]]
请注意,通过添加nearest
和farthest
(分别是np.min
的{{1}}和np.max
,nzero[2]
和@csrf
也可以很容易地将这种方法应用于3D阵列。