numpy.ndarray.transpose用法理解

numpy.ndarray.transpose方法对于高维数组来讲,略微有点不太好理解。下面给出我自己对该方法的理解。

对于一个高维数组,transpose((i,j,k))可以这样理解:选取原数组的i轴上的数据作为新数组的0轴,选取原数组的j轴上的数据作为新数组的1轴。而0轴可想象为“片”,1轴可想象为“片上的行”,2轴可想象为“片上的列”。

具体操作来讲:

>>>import numpy as np
>>>a=np.arange(16).reshape(2,2,4)
>>>a
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
>>>a.transpose((2,1,0))
array([[[ 0,  8],
        [ 4, 12]],

       [[ 1,  9],
        [ 5, 13]],

       [[ 2, 10],
        [ 6, 14]],

       [[ 3, 11],
        [ 7, 15]]])

选取原数组的2轴的数据作为新数组的0轴,比如0,4,8,12必须在新数组的0轴上,那么到底是[[0,4],[8,12]]还是[[0,8],[4,12]]?

再看j=1,即原1轴上的仍然是新的1轴,即新数组的row就是原数组的row,所以4不能转到1轴,所以是[[0,8],[4,12]]

>>>a.transpose((1,2,0))
array([[[ 0,  8],
        [ 1,  9],
        [ 2, 10],
        [ 3, 11]],

       [[ 4, 12],
        [ 5, 13],
        [ 6, 14],
        [ 7, 15]]])

选取原数组的1轴的数据作为新数组的0轴,比如0,1,2,38,9,10,11必须在新数组的0轴上,那么到底是横排还是竖排?

再看j=2,即原数组的2轴变成新数组的1轴,意思就是原来的列就是现在的行,那确定就是竖排。

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

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

原来的0轴还是新的0轴,那么横排还是竖排?

j=2,即行变列,竖排。

>>>a.transpose((2,0,1))
array([[[ 0,  4],
        [ 8, 12]],

       [[ 1,  5],
        [ 9, 13]],

       [[ 2,  6],
        [10, 14]],

       [[ 3,  7],
        [11, 15]]])

老规矩,先把原数组所有“片”的列拿出来当作新的“片”,那么老问题,竖排还是横排?

j=0,意思就是原“片”中的数据必须是“行”,所以横排。

posted @   JohnYang819  阅读(458)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示