我正在尝试理解以下代码。
content_array[:, :, :, 0] -= 103.939
content_array[:, :, :, 1] -= 116.779
content_array[:, :, :, 2] -= 123.68
content_array = content_array[:, :, :, ::-1]
style_array[:, :, :, 0] -= 103.939
style_array[:, :, :, 1] -= 116.779
style_array[:, :, :, 2] -= 123.68
style_array = style_array[:, :, :, ::-1]
content_array
和style_array
是尺寸分别为
(1, 512, 512, 3)
的数组。
我真正理解的不是索引([:, :, :, 0]
,[:, :, :, 1]
,[:, :, :, 2]
)。这是否意味着我们正在为每个维度编制索引?为什么我们使用':'?
答案 0 :(得分:2)
numpy最有趣的索引功能之一是能够对切片进行索引。切片是给定维度的子阵列,它们以i:j:k
的形式编写,其中i是起始索引,j是结尾(不包括),k是步骤。在大多数情况下指定所有3个参数将是乏味的,这就是为什么它们都具有默认值。 i = 0,j = n其中n是数组的长度,k = 1。因此,选择维度中的所有元素将归结为写array[::]
,其语法糖为array[:]
。
因此content_array[:, :, :, 0]
是一个维度(1, 512, 512)
的数组。写content_array[:, :, :, 0] -= 103.939
意味着通过选择所有元素来设置所有数组的值,使得它们在最后一个维度上具有索引0,并且将所有这些元素减少103.939。
我建议你阅读https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html。