这是什么意思?
data.transpose(3, 0, 1, 2)
另外,如果是data.shape == (10, 10, 10)
,我为什么要得到ValueError: axes don't match array
发布于 2017-02-10 07:44:01
从np.transpose上的python文档中,np.transpose
函数的第二个参数是axes
,它是一个ints列表,默认情况下是可选的,反转维度,否则根据给定的值排列轴。
例子:
>>> 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]])
发布于 2019-09-02 13:02:04
该操作将从(samples
、rows
、columns
、channels
)转换为(samples
、channels
、rows
、cols
),可能将opencv转换为pytorch。
发布于 2020-07-19 02:25:11
让我从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
如果图像批处理为1时,您可以简单地通过将(10,10,10)到( 1 ,10,10,10)整形来添加另一个维度。
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
工作的。
>>> 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]]])
很明显,两种方法的工作原理是一样的。
https://stackoverflow.com/questions/42153826
复制相似问题