首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转置(3,0,1,2)是什么意思?

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

Stack Overflow用户
提问于 2017-02-10 07:31:32
回答 7查看 16.5K关注 0票数 2

这是什么意思?

代码语言:javascript
运行
复制
data.transpose(3, 0, 1, 2)

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-02-10 07:44:01

np.transpose上的python文档中,np.transpose函数的第二个参数是axes,它是一个ints列表,默认情况下是可选的,反转维度,否则根据给定的值排列轴。

例子:

代码语言:javascript
运行
复制
>>> x = np.arange(9).reshape((3,3))
>>> x
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

>>> np.transpose(x, (0,1))
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

>>> np.transpose(x, (1,0))
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
票数 0
EN

Stack Overflow用户

发布于 2019-09-02 13:02:04

该操作将从(samplesrowscolumnschannels)转换为(sampleschannelsrowscols),可能将opencv转换为pytorch。

票数 3
EN

Stack Overflow用户

发布于 2020-07-19 02:25:11

让我从Python3的角度来讨论。

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

这是错误的,因为这个操作需要4个维度,而您只提供3个维度(如(10,10,10)中的那样)。可复制为:

代码语言:javascript
运行
复制
>>> 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

如果图像批处理为1时,您可以简单地通过将(10,10,10)到( 1 ,10,10,10)整形来添加另一个维度。

代码语言:javascript
运行
复制
w,h,c = original_image.shape #10,10,10
modified_img = np.reshape((1,w,h,c)) #(1,10,10,10)

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

对于二维numpy数组,数组(矩阵)的transpose就像名称所显示的那样。但是对于像你这样的高维数组,它基本上是作为moveaxis工作的。

代码语言:javascript
运行
复制
>>> 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]]])

很明显,两种方法的工作原理是一样的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42153826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档