我正在查看一些代码,并且有一行说:
# 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.]]])
答案 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)) -> 这里索引位置需要互换