代码行`np.transpose(image_tensor,(2,1,0))`做什么?

时间:2016-11-25 02:47:12

标签: python numpy

我正在查看一些代码,并且有一行说:

# transpose to standard format
# You might want to comment this line or reverse the shuffle
# if you will use a learning algorithm like CNN, since they like their channels separated.
image_standard_form = np.transpose(image, (2, 1, 0))

我无法弄清楚它做了什么。我看了documentation,但我不太明白transpose参数中的“轴”是什么意思。它说:

axes : list of ints, optional
By default, reverse the dimensions, otherwise permute the axes according to the values given.

但它并没有真正说出它的用途。此外,使用转置和元组的示例不是很有洞察力(或者至少没有告诉我它应该做什么)。有人可以向我解释它的假设吗?

我也做了一个我自己的例子来弄清楚它的作用,但我不是100%我理解它:

>>> x
array([[[ 0.,  1.,  2.],
        [ 0.,  1.,  2.],
        [ 0.,  1.,  2.]],

       [[ 0.,  1.,  2.],
        [ 0.,  1.,  2.],
        [ 0.,  1.,  2.]],

       [[ 0.,  1.,  2.],
        [ 0.,  1.,  2.],
        [ 0.,  1.,  2.]]])
>>> np.transpose(x, (2, 1, 0))
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]]])

2 个答案:

答案 0 :(得分:3)

假设您想要使用以下内容访问元素:

elem = image[i, j, k]

转置后,现在您应该使用以下内容访问相同的元素:

elem = image_standard_form[k, j, i]

转置中的(2,1,0)表示指数的排列。

对于美国有线电视新闻网(CNN)来说,它可能需要变成一个形状的张量:

[width, height, channels]

成:

[channels, height, width]

答案 1 :(得分:0)

假设让我们举一个例子来使用 matplotlib 库中的 pyplot 显示图像。

一般来说, numpy.array 形式的图像具有宽度高度no_of 通道。只有这种形式可以帮助我们绘制它。假设如果你想顺时针旋转图像,那么 numpy.array 需要通过交换宽度和高度的值来使用转置。

此时我们可以使用转置, 用法: 示例数组(img),形状为 32x28x3(宽度(索引 0),高度(索引 1),通道(索引 2)) 要旋转它,只需通过执行交换宽度和高度 ** np.transpose(img,(1,0,2)) -> 这里索引位置需要互换