【问题标题】:What does this slicing mean [:, :, 0]?这个切片是什么意思 [:, :, 0]?
【发布时间】:2018-01-15 01:17:37
【问题描述】:

我想了解this code

我无法理解这条线在做什么。流变量是一个流向量数组,图像中的每个像素都有一个流向量(因此是一个二维数组)。

fx, fy = flow[:, :, 0], flow[:, :, 1]

任何帮助将不胜感激

【问题讨论】:

  • 我读过它,我认为它说它返回维度为 N - 1 的相应子数组,但我不太明白这是什么意思,想知道是否有人可以解释一下不同的方式?

标签: python numpy indexing slice


【解决方案1】:

让我们首先简化表达式。你的代码:

fx, fy = flow[:, :, 0], flow[:, :, 1]

相当于:

fx = flow[:, :, 0]
fy = flow[:, :, 1]

所以现在归结为flow[:, :, 0]。这意味着flow 是一个至少具有三个维度的numpy 数组(让我们将N 定义为维数)。那么flow[:,:,0] 是一个N-1 维数组,我们总是选择0 作为第三维。

图像处理的上下文中,图像通常是一个尺寸为w × h × 3(三个颜色通道)的3d 数组(假设它具有颜色)。所以这里意味着flow[:,:,0] 将生成一个w × h view 其中对于每个像素,我们选择红色通道(假设红色通道是第一个通道)。

所以如果flow 是一个 5 × 4 × 3 的矩阵,比如:

>>> flow
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17],
        [18, 19, 20],
        [21, 22, 23]],

       [[24, 25, 26],
        [27, 28, 29],
        [30, 31, 32],
        [33, 34, 35]],

       [[36, 37, 38],
        [39, 40, 41],
        [42, 43, 44],
        [45, 46, 47]],

       [[48, 49, 50],
        [51, 52, 53],
        [54, 55, 56],
        [57, 58, 59]]])

然后我们将为每个 3 元组获取第一个元素,使其成为:

>>> flow[:,:,0]
array([[ 0,  3,  6,  9],
       [12, 15, 18, 21],
       [24, 27, 30, 33],
       [36, 39, 42, 45],
       [48, 51, 54, 57]])

通过查询flow[:,:,1],我们得到:

>>> flow[:,:,1]
array([[ 1,  4,  7, 10],
       [13, 16, 19, 22],
       [25, 28, 31, 34],
       [37, 40, 43, 46],
       [49, 52, 55, 58]])

请注意,这些是视图:如果您更改flow,它也会影响fxfy,即使您这样做了之前的任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2012-04-11
    • 2015-12-04
    • 2014-04-25
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多