我希望在完成帖子之前我会解决这个问题,但在这里:
我有一个形状为array1
的数组(4808L,5135L),我正在尝试选择数组的矩形子集。具体来说,我尝试选择行4460:4807
中的所有值以及列2718:2967
中的所有值。
首先,我创建一个与array1
形状相同的面具,如:
mask = np.zeros(array1.shape[:2], dtype = "uint8")
mask[array1== 399] = 255
然后我试图找到mask = 255
:
true_points = np.argwhere(mask)
top_left = true_points.min(axis=0)
# take the largest points and use them as the bottom right of your crop
bottom_right = true_points.max(axis=0)
cmask = mask[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]
其中: top_left = array([4460,2718],dtype = int64) bottom_right = array([4807,2967],dtype = int64)
cmask
看起来很正确。然后使用top_left
和bottom_right
我尝试使用以下代码array1
crop_array = array1[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]
这会导致crop_array
具有相同的cmask
形状,但值的填充不正确。由于cmask[0][0] = 0
我希望crop_array[0][0]
也等于零。
如何在保留crop_array
的结构的同时,将array1
与cmask
的值进行对比?
提前致谢。
答案 0 :(得分:2)
如果我正确理解了您的问题,那么您正在寻找.copy()方法。匹配索引和变量的示例:
import numpy as np
array1 = np.random.rand(4808,5135)
crop_array = array1[4417:,2718:2967].copy()
assert np.all(np.equal(array1[4417:,2718:2967], crop_array)) == True, (
'Equality Failed'
)