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