2024-04-27 03:20:51 发布
网友
在Numpy中,给定一个由size(N,hl,wl)组成的大图像A,以及大小为(N)的x和大小为(N)的y的坐标,我想得到大小为(N,16,16)的较小图像
size(N,hl,wl)
A
在for循环中,它将如下所示:
B=numpy.zeros((N,16,16)) for i in range(0,N): B[i,:,:]=A[i,y[i]:y[i]+16,x[i]:x[i]+16]
但我可以用索引来完成吗? 附加问题:这个索引在pytorch中也能工作吗?如果没有,我如何在那里实现这一点?在
pytorch
在numpy中,切片非常简单,同样的逻辑也适用于pytorch示例。例如
imgs = np.random.normal(size=(16,24,24)) imgs[:,0:12,0:12].shape imgs_tensor = torch.from_numpy(imgs) imgs_tensor[:,0:12,0:12].size()
其中切片中的第一个:表示选择批中的所有图像。第二个和第三个:表示高度和宽度的切片。在
:
使用^{} from ^{}非常简单,将那些滑动窗口视图作为一个6D数组,第四个轴是singleton。然后,使用^{}根据y和x索引选择我们想要的索引,以便索引到窗口数组的第二和第三个轴,从而得到我们的B。在
y
x
B
因此,实施将是-
from skimage.util.shape import view_as_windows BSZ = 16, 16 # Blocksize A6D = view_as_windows(A,(1,BSZ[0],BSZ[1])) B_out = A6D[np.arange(N),y,x,0]
说明
为了向其他读者解释这个问题的真正原因,下面是一个在较小的数据集上运行的示例,其块大小为(2,2)-
(2,2)
1)输入阵列(3D):
2)索引到第二和第三轴的y和x索引:
3)最后是期望的输出,它是沿着第一个轴的每个2D切片的一个块,其起点(左上角点)是该2D切片上的(y,x)。请参阅A中的星号以了解-
(y,x)
In [81]: B Out[81]: array([[[ 2, 6], [ 3, 4]], [[ 9, 3], [10, 8]], [[ 4, 8], [ 2, 10]]])
在numpy中,切片非常简单,同样的逻辑也适用于pytorch示例。例如
其中切片中的第一个
:
表示选择批中的所有图像。第二个和第三个:
表示高度和宽度的切片。在使用^{} from ^{} 非常简单,将那些滑动窗口视图作为一个6D数组,第四个轴是singleton。然后,使用^{} 根据
y
和x
索引选择我们想要的索引,以便索引到窗口数组的第二和第三个轴,从而得到我们的B
。在因此,实施将是-
说明
为了向其他读者解释这个问题的真正原因,下面是一个在较小的数据集上运行的示例,其块大小为
(2,2)
-1)输入阵列(3D):
^{pr2}$2)索引到第二和第三轴的y和x索引:
^{3}$3)最后是期望的输出,它是沿着第一个轴的每个2D切片的一个块,其起点(左上角点)是该2D切片上的
(y,x)
。请参阅A中的星号以了解-相关问题 更多 >
编程相关推荐