转置(3,0,1,2)是什么意思?

Joh*_*ohn 3 python transpose numpy

这是什么意思?

data.transpose(3, 0, 1, 2)
Run Code Online (Sandbox Code Playgroud)

另外,如果data.shape == (10, 10, 10),为什么我会得到ValueError: axes don't match array

Pe *_*Dro 5

我用Python3来讨论一下。

我在Python中使用转置函数作为data.transpose(3, 0, 1, 2)

这是错误的,因为此操作需要 4 个维度,而您只提供 3 个维度(如 中所示(10,10,10))。可重现为:

>>> a = np.arange(60).reshape((1,4,5,3))
>>> b = a.transpose((2,0,1))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: axes don't match array
Run Code Online (Sandbox Code Playgroud)

如果图像批次为 1,您可以简单地通过将 (10,10,10) 重塑为 (1,10,10,10) 来添加另一个维度。这可以通过以下方式完成:

>>> a = np.arange(60).reshape((1,4,5,3))
>>> b = a.transpose((2,0,1))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: axes don't match array
Run Code Online (Sandbox Code Playgroud)

3、0、1、2是什么意思?

对于 2D numpy 数组,transpose数组(矩阵)的操作正如其名称所示。但对于像你这样的高维数组,它基本上就像moveaxis.

>>> a = np.arange(60).reshape((4,5,3))
>>> b = a.transpose((2,0,1))
>>> b.shape
(3, 4, 5)
>>> c = np.moveaxis(a,-1,0)
>>> c.shape
(3, 4, 5)
>>> b
array([[[ 0,  3,  6,  9, 12],
        [15, 18, 21, 24, 27],
        [30, 33, 36, 39, 42],
        [45, 48, 51, 54, 57]],

       [[ 1,  4,  7, 10, 13],
        [16, 19, 22, 25, 28],
        [31, 34, 37, 40, 43],
        [46, 49, 52, 55, 58]],

       [[ 2,  5,  8, 11, 14],
        [17, 20, 23, 26, 29],
        [32, 35, 38, 41, 44],
        [47, 50, 53, 56, 59]]])
>>> c
array([[[ 0,  3,  6,  9, 12],
        [15, 18, 21, 24, 27],
        [30, 33, 36, 39, 42],
        [45, 48, 51, 54, 57]],

       [[ 1,  4,  7, 10, 13],
        [16, 19, 22, 25, 28],
        [31, 34, 37, 40, 43],
        [46, 49, 52, 55, 58]],

       [[ 2,  5,  8, 11, 14],
        [17, 20, 23, 26, 29],
        [32, 35, 38, 41, 44],
        [47, 50, 53, 56, 59]]])
Run Code Online (Sandbox Code Playgroud)

显然,这两种方法的工作原理是相同的。