Numpy:从数组

时间:2017-01-29 01:08:21

标签: python arrays numpy indexing

我希望在完成帖子之前我会解决这个问题,但在这里:

我有一个形状为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_leftbottom_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的结构的同时,将array1cmask的值进行对比?

提前致谢。

1 个答案:

答案 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'
)