python 学习笔记(1)--numpy数组转置

来源:互联网 发布:java工程师评等级 编辑:程序博客网 时间:2024/05/17 08:07

关于数组的转置,Numpy提供了transpose函数和.T属性两种实现形式,一般transpose使用起来更为方便,另外转换其中的两个轴还可以用swapreaxes,下面通过例子来做介绍。

#一维数组转置>>> arr = np.arange(6)>>> print arr[0, 1, 2, 3, 4, 5]>>> print np.transpose(arr)[0, 1, 2, 3, 4, 5]#一维还是一维…#二维数组转置>>> arr = np.arange(6).reshape((2,3))>>> print arr[[0, 1, 2], [3, 4, 5]]>>> print np.transpose(arr)[[0,3], [1,4], [3,5]]#三维数组的转置>>> arr = np.arange(24).reshape((2,3,4))>>> print arr[[[ 0, 1, 2, 3],   [ 4, 5, 6, 7],   [ 8, 9, 10, 11]],  [[ 12, 13, 14, 15],   [ 16, 17, 18, 19],   [ 20, 21, 22, 23]]]>>> print np.transpose(arr)[[[0, 12],  [4, 16],  [8, 20]], [[1, 13],  [5, 17],  [9, 21]], [[2, 14],  [6, 18],  [10, 22]], [[3, 15],  [7, 19],  [11, 23]]]#当数组>=三维之后,我们可能希望按照特定规则来转置,transpose 可以接受用于指定转置的坐标轴号码的元组>>> print np.transpose(arr, (1,0,2))[[[ 0, 1, 2, 3],  [ 12, 13, 14, 15]], [[ 4, 5, 6, 7],  [ 16, 17, 18, 19]], [[ 8, 9, 10, 11],  [ 20, 21, 22, 23]]]

对于是否指定转化规则,具体来看三维的变化:原始数据的“三维”是(2,3,4),不指定转换规则后的“三维”是(4,3,2),而指定规则后的三维则是按照我们指定的规则,将其一维和二维进行调换。

#原始三维数据规则>>> print (arr.shape)(2, 3, 4)#不指定转换规则>>> print (np.transpose(arr).shape)(4, 3, 2)#指定转换规则>>> print (np.transpose(arr,(1, 0, 2)).shape)(3, 2, 4)

ndarray的T属性,用法则比较简单,只需要在数组后跟.T即可。.T属性实际是转置里面的特殊情况,即不指定转置规则的默认规则。

#一维数组转置>>> arr = np.arange(6)>>> print arr[0, 1, 2, 3, 4, 5]>>> print arr.T[0, 1, 2, 3, 4, 5]#一维还是一维…#二维数组转置>>> arr = np.arange(6).reshape((2,3))>>> print arr[[0, 1, 2], [3, 4, 5]]>>> print arr.T[[0,3], [1,4], [3,5]]#三维数组的转置>>> arr = np.arange(24).reshape((2,3,4))>>> print arr[[[ 0, 1, 2, 3],   [ 4, 5, 6, 7],   [ 8, 9, 10, 11]],  [[ 12, 13, 14, 15],   [ 16, 17, 18, 19],   [ 20, 21, 22, 23]]]>>> print arr.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]]]

当某些情况下,你可能只需要转换其中的两个轴,除了可以使用transpose指定轴以外(当然需要每个轴都指定顺便,只是调整其中的部分而已),还可以使用swapreaxes。

>>> arr = np.arange(24).reshape((2,3,4))>>> print arr[[[ 0, 1, 2, 3],   [ 4, 5, 6, 7],   [ 8, 9, 10, 11]],  [[ 12, 13, 14, 15],   [ 16, 17, 18, 19],   [ 20, 21, 22, 23]]]>>> print arr.swapaxes(1, 0)[[[ 0, 1, 2, 3],  [ 12, 13, 14, 15]], [[ 4, 5, 6, 7],  [ 16, 17, 18, 19]], [[ 8, 9, 10, 11],  [ 20, 21, 22, 23]]]
1 0
原创粉丝点击