Python 是否有一种SciPy方法可以自动拍摄图像,即。E从2d“numpy.ndarray”修剪零?
对于1dPython 是否有一种SciPy方法可以自动拍摄图像,即。E从2d“numpy.ndarray”修剪零?,python,numpy,scipy,crop,trim,Python,Numpy,Scipy,Crop,Trim,对于1dnumpy.ndarray。可以使用numpy或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
numpy.ndarray
。可以使用numpy
或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]])
我希望得到的结果是:
array([[4, 1, 2],
[0, 3, 6]])
您可以使用一些
numpy
方法尝试列表理解:
>>> np.array([sub[~(sub == 0)].tolist() for sub in a if sub[sub != 0].tolist()])
array([[4, 1, 2], [3, 6]], dtype=object)
>>>
我将搜索最左边、最右边、最上面和最下面的非零的位置,然后按照以下方式切片该数组:
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]]
请注意,通过添加
最近的
和最远的
,这种方法也可以很容易地应用于3D阵列,它们分别是nzero[2]
的np.min和np.max
,如果第二列都是零呢?a=np.transpose(a[np.sum(a,1)==0])
两次