我们如何索引python中的张量?

时间:2017-03-30 07:45:35

标签: python numpy

我正在尝试理解以下代码。

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_arraystyle_array是尺寸分别为 (1, 512, 512, 3)的数组。

我真正理解的不是索引([:, :, :, 0][:, :, :, 1][:, :, :, 2])。这是否意味着我们正在为每个维度编制索引?为什么我们使用':'?

1 个答案:

答案 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