我是Python的新手。
我对以下内容发生的事情感到困惑:
A.shape = (60L, 128L, 128L)
B.shape = (2L, 60L, 128L, 5L)
和{{1}}
我相信它应该制作某种形象补丁。有人可以向我解释这是做什么的吗?这个例子是在神经网络应用于图像的背景下。
答案 0 :(得分:1)
A的形状告诉我A很可能是60个灰度图像(批量大小为60)的数组,每个图像的大小为128x128像素。
我们有:B = np.array([A[..., n:n+5] for n in (5*4, 5*5)])
。为了更好地了解这里发生的事情,让我们反过来打开这条线:
for n in (5*4, 5*5)
:这与for n in (20, 25)
相同。由于与数据或其余代码相关的一些直观原因,作者可能选择以这种方式编写它。这为我们提供了n=20
和n=25
。
A[..., n:n+5]
:这与A[:, :, n:n+5]
相同。这为我们提供了A
中所有图片的所有行,但n:n+5
只列出了5列。然后,结果数组的形状为(60, 128, 5)
。
n=20
为我们提供了A[:, :, 20:25]
,n=25
为我们提供了A[:, :, 25:30]
。因此,这些数组中的每一个都具有(60, 128, 5)
的大小。
同时,[A[..., n:n+5] for n in (5*4, 5*5)]
为我们提供了一个列表(谢谢列表理解!),其中包含两个元素,每个元素都是一个大小为(60, 128, 5)
的numpy数组。 np.array()
将此列表转换为形状为(2, 60, 128, 5)
的numpy数组。
结果是B
包含每个图像的2个色块,每个色块是原始图像的5像素列宽子集 - 一个从第20列开始,第二个从第25列开始。
如果没有关于网络及其目的的更多信息,我无法推测这种作物的原因。
希望这有帮助!