技术标签: 修仙之路:python篇
官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html
numpy.transpose(a, axes=None)
| Parameters: |
a:Input array,输入数组 axes:可选,整型list。默认情况下,反转维度,否则根据给定的值对轴进行排列。 |
|---|---|
| Returns: | 数组。a的坐标轴被打乱了。只要有可能,就会返回一个视图。 |
栗子1:不加参数的情况下,transpose()的作用就是整个矩阵完全置换
import numpy as np
A = np.arange(24).reshape(2, 3, 4)
print(A.shape)
print(A)
# result
shape: (2, 3, 4)
A: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
------------------------------------------
T = A.transpose()
print(T.shape)
print(T)
# result
shape: (4, 3, 2)
T: [[[ 0 12]
[ 4 16]
[ 8 20]]
[[ 1 13]
[ 5 17]
[ 9 21]]
[[ 2 14]
[ 6 18]
[10 22]]
[[ 3 15]
[ 7 19]
[11 23]]]
------------------------------------------
print(A[1, 2, 3])
print(T[3, 2, 1])
#result
23
23
栗子2:加参数时,必须根据矩阵的维度来设置参数
import numpy as np
#对于该矩阵可以认为有三个维度,即0,1,2
A = np.arange(24).reshape((2,3,4))
print(A.shape)
print(A)
#如果不改变原矩阵,那么正常的参数顺序是:(0,1,2)
T1 = A.transpose(0,1,2)
print(T1.shape)
print(T1)
print('_____________________')
#如果想要置换第1和第2个维度,则参数顺序为:(1, 0 ,2)
T2 = A.transpose(1,0,2)
print(T2.shape)
print(T2)
print('_____________________')
#如果要置换第1和第3个维度,则参数的顺序为:(2,1,0)
T = A.transpose(2,1,0)
print(T3.shape)
print(T3)
# result
A.shape: (2, 3, 4)
A: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
_____________________
T1.shape (2, 3, 4)
T1: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
_____________________
T2.shape: (3, 2, 4)
T2: [[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]
_____________________
T3.shape: (4, 3, 2)
T3: [[[ 0 12]
[ 4 16]
[ 8 20]]
[[ 1 13]
[ 5 17]
[ 9 21]]
[[ 2 14]
[ 6 18]
[10 22]]
[[ 3 15]
[ 7 19]
[11 23]]]
通俗理解:shape=(C,H,W),也就是有C个H*W的二维矩阵。不管怎么转置,第一位为C,第二位为H,第三位W,这是恒定不变的,变得只是其对应的数值。比如shape=(3,4,5),有3个4*5的二维矩阵组成的三维矩阵,此时通过transpose变换,shape=(4,3,5),有4个3*5的矩阵组成的三维矩阵。这样想就很容易看出来是怎样变换的了。
参考:https://blog.csdn.net/oMoDao1/article/details/81776961
学卷积的时候看到numpy.transpose()不太懂,网上最多的解释也没看明白,我琢磨出一个比较粗糙的理解 x视为三维数组[a,b,c],第0维值为a,第1维值为b,第2维值为c 上面这条语句的意思是调换位置,第2维替换原来的第0维,其他同理。因此得到新的x[c,a,b] 参考文档: Python中Numpy.transpose()...
最近在看斯坦福大学的cs231n机器学习课程,第一节的assignment1里的KNN线性分类器中用到了这两个函数,由于我是新手,就看不懂这两个函数坐了什么,其实结合那个例程,这个函数当时会觉得好像明白了它的意思,但是后来在CSDN上看了一个讲stack()函数的博客,彻底把我搞懵了,研究了一天,结果发现这两个函数(Numpy.transpose()和Numpy.stack())是有很强的相似性的...
先来看一个例子 输出: arr2.shape 是(4, 3, 3) 意为 4维,3*3矩阵 arr2.transpose调换arr2.shape的顺序,给arr2.shape标一下角标,(4[0], 3[1], 3[2]) [ ] 里是shape的索引,transpose((1, 0, 2)) 的意思是 按照这个顺序 重新设置shape 也就是 (3[1], 4[0], 3[2]) transpo...
问题 今天在想把一个三维的[3, x, y]的tensor转为[x, y, 3]遇到一些问题,最后的解决方法是把tensor转为numpy,然后使用numpy.transpose(mytensor, [1, 2, 0])解决。因此分析一下torch和numpy中的transpose函数。 参考 numpy.transpose torch.transpose numpy.transpose 用法如下...
三维数组 正序为(0,1,2),数组为 为什么进过tanspose(1,0,2),数组变为 仔细观察之后,可以看到转置后的数组和转置前的数组的区别就是第一页的第二行和第二页的第一行对换了,可是为什么? 当我用arr1[0,1,0],索引值为4 当我用arr2[1,0,0],索引值为4 &...
C++中实现维度变换numpy.transpose() 1. 工程需求 使用TensorRT部署工业模型的时候,常需要将数据转换为深度学习模型需要的维度数据。如果数据维度变换不正确,直接会导致推理结果出错。 2. 参考 C++ – C++实现Python numpy的矩阵维度转置算法,例如(N,H,W,C)转换为(N,C,H,W) 3. 核心原理 例如将矩阵数据进行(N,H,W,C)转...
1)是重塑的一种特殊形式,返回的是源数据的视图(不会进行任何复制操作) 2)需要一个由轴编号组成的元组才能对这些轴进行转置 以三维数组为例: 假设shape(z, x, y) 1)shape的x轴和y轴的转换(跟二维数组一样) 2)对于z轴与x轴的转换: transpose的变换是根据shape进行的 转换前 shape 是(0, 1, 2) [[(0,0,0), (0,0,1), (0,0,2)...
这里写目录标题 一、transpose的用法 二、swapaxes的用法 一、transpose的用法 用法: arr.transpose(x,y,z)中的 (x,y,z)相当于三维坐标,默认情况下为(0,1,2), arr数组 arr的维度 arr.transpose(1,2,0) 表示进行如下的变换:(x,y,z)–>(y,z,x),有两层含义; 首先是维度进行变化: (2,...
今天在处理图像时,发现输入图像的尺寸为(长、宽、通道数),需要改为(通道数、长、宽),起初打算使用np.reshape想当然的修改,但却发现已经修改了图像的内容。后来使用np.transpose修改成功。在此记录下两个函数的区别。 np.reshape 在Numpy中,reshape的操作首先将多维数组转为一维向量,再按照转变后新数组的维度,截取拼成新的形状。一定不要用来处理图片信息!!! 下面希...
transpose函数 numpy.transpose (arr, axes) transpose: 反转或排列数组的轴; 返回修改后的数组;对于具有两个轴的数组a,transpose(a)给出矩阵转置. 参数 arr:要操作的数组 axes(可选):整数或列表(如果指定参数,则它必须是包含所有索引的重排列; 如果不指定,则默认为反转索引的顺序) 创建一个二维数组 输出结果如下: 未指定axes,...