增加在Python中(可能)部分超出范围的ROI的值

增加在Python中(可能)部分超出范围的ROI的值,python,numpy,Python,Numpy,我有一个数组需要用另一个(较小)数组的值部分递增。但是,即使较小的数组确实在较大数组的边界内启动,在如下所示的某些情况下,它也可能溢出。 在这种情况下,我仍然希望以剪裁溢出索引并使用边界内剩余内容的方式递增/修改值。 下面是我目前的做法 h = big_image.shape[0] w = big_image.shape[1] small_image = make_small_image(c) # c is the edge length if (x+c) > w: small

我有一个数组需要用另一个(较小)数组的值部分递增。但是,即使较小的数组确实在较大数组的边界内启动,在如下所示的某些情况下,它也可能溢出。

在这种情况下,我仍然希望以剪裁溢出索引并使用边界内剩余内容的方式递增/修改值。

下面是我目前的做法

h = big_image.shape[0]
w = big_image.shape[1]

small_image = make_small_image(c) # c is the edge length

if (x+c) > w:
   small_image = small_image[:(w - x), :]

if (y+c) > h:
   small_image = small_image[:, :(h - y)]

big_image[y:y + c, x: x + c] += small_image.T

我想知道是否有一种更简单、更快的方法(API或更好的技术等)

现在您正在修改数组
小图像
,从而在if条件为
真时创建数据的新副本。相反,您可以只为剪切的小图像创建一个内存视图:

small_img_memview = small_image[:(w - x), :(h - y)]
即使if条件为
False
,并且应该比复制更快,这也应该始终是正确的

当然,您也可以在一行中编写所有代码:

big_image[y:y + c, x: x + c] += small_image[:(w - x), :(h - y)].T

为什么要下线?我还是不明白我的问题出了什么问题我的回答有什么问题?这是正确的,也是唯一一种更容易、更快地完成任务的方法。也许有人投了反对票,因为它已经被回答了,但答案没有被标记为接受。但是我觉得你的问题很好,所以我投了更高的票。哦,不,你的答案很好,我正在考虑投更高的票。但是否决票就在那里,就在我提出这个问题之后。说到接受你的回答,我只是等了两三天,然后我会接受的。谢谢你的理解。好的,太好了,我很高兴能帮上忙!