二维数组的转置应该都知道,就是行列交换

而在numpy中也可以对三维数组进行转置,np.T 默认进行的操作是将0轴与2轴交换

本文主要对三位数组轴交换的理解上发表本人的看法。


a = np.array(range(24))

Out[101]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23]) b = a.reshape(2,3,4)
b
Out[103]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], [[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])

在三位数组中我们称三个轴分别为行,列,面

在数组b中,

[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],是一行
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]是一行
展开写[[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]看的更清楚。这是行的概念
[ 0, 1, 2, 3],是一列
[ 4, 5, 6, 7],是一列
[ 8, 9, 10, 11]是一列
而其中[0,4,8] [1,5,9] [2,6,10] [3,7,11]分别是一个面
回过头来可以发现,b是由2行3列4面组成的三维数组 (行代表0轴,列1轴,面2轴) 接下来记住一句话,交换哪两个轴,要保持另一个轴不改变,示例如下
取c为b的列和面交换后的数组
c = b.swapaxes(1,2)

c
Out[105]:
array([[[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]], [[12, 16, 20],
[13, 17, 21],
[14, 18, 22],
[15, 19, 23]]])

回想那句话,交换哪两个轴,另一个轴不变,可以发现c还是两行,而且交换只是在每一行中发生变化

原来的列变成了面,原来的面变成了列

看第二种,d表示b的0轴和2轴的交换

d = b.swapaxes(0,2)

d
Out[108]:
array([[[ 0, 12],
[ 4, 16],
[ 8, 20]], [[ 1, 13],
[ 5, 17],
[ 9, 21]], [[ 2, 14],
[ 6, 18],
[10, 22]], [[ 3, 15],
[ 7, 19],
[11, 23]]])
看上去有点蒙逼了,但还是想一下那句话,交换了0轴和2轴,那么1轴是不变的。
我们把原来的b看成是以行和面为元素的二维数组
即b是两行,四面。每个面用第一个元素代替 即[0,4,8] 用[0]来代替
即b可以写成[[0],[1],[2],[3]
      [12],[13],[14],[15]]
然后进行交换轴 其实也就变成了二维数组的转置
变换后为[0],[12]
    [1],[13]
    [2],[14]
    [3],[15]
最后我们再把每个面展开,就得到结果了。到现在你有没有法线,面中的元素个数与列的大小是一样的。
好了,接下来你可以试试将0轴与1轴交换。一步一步来,欢迎评论区讨论。
      
												

Numpy三维数组的转置与交换轴的更多相关文章

  1. PIL对象和numpy三维数组的互相转换

    #https://stackoverflow.com/questions/384759/how-to-convert-a-pil-image-into-a-numpy-array from PIL i ...

  2. numpy中三维数组转变成二维数组

    numpy中reshape()函数对三维数组进行转换成二维数组,见下面例子: >>>a=np.reshape(np.arange(18),(3,3,2)) >>> ...

  3. numpy基础教程--二维数组的转置

    使用numpy库可以快速将一个二维数组进行转置,方法有三种 1.使用numpy包里面的transpose()可以快速将一个二维数组转置 2.使用.T属性快速转置 3.使用swapaxes(1, 0)方 ...

  4. 一、Numpy基础--数组

    (一)Numpy数组对象 Numpy中的nadrray是一个多维数组对象,该对象由两部分组成: 实际的数据 描述这些数据的元数据 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据. 数组的数 ...

  5. Numpy | 12 数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 一.修改数组形状 函数 描述 reshape 不改变数据 ...

  6. NumPy:数组计算

    一.MumPy:数组计算 1.NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础.2.NumPy的主要功能: ndarray,一个多维数组结构,高效且节省空间 无需循环 ...

  7. python数据分析 Numpy基础 数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  8. C语言三维数组分解

    很多人在学习C的时候,感觉三维数组很难想象,而且不理解深度是什么?做了一个图,帮大家分解一下                                                       ...

  9. numpy的数组常用运算练习

    import numpy as np # 一维数组 print('==========# 一维数组===========') A = np.array([1, 2, 3, 4]) print(A) # ...

随机推荐

  1. Java+opencv实现人脸检测

    版本 Java1.8 opencv3.4 代码: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax ...

  2. python 的 format 函数

    python的格式化字符串方法之一------------format 函数 它通过{}和:来代替%. 数字 格式 输出 描述 3.1415926 {:.2f} 3.14 保留小数点后两位 3.141 ...

  3. 小程序通过background-image设置背景图片

    微信小程序通过background-image设置背景:只支持线上图片和base64图片,不支持本地图片:base64图片设置步骤如下: 1.在网站http://imgbase64.duoshiton ...

  4. 【转】C++中嵌入python程序——参数传递

    C++中嵌入python程序——参数传递 前面两篇博客已经介绍如何在C++中嵌套使用 python,但是在实际使用中,我们需要向python传递各种各样的参数,这样的程序才具有更高的灵活性.下面简单介 ...

  5. TSP-UK49687

    Copied From:http://www.math.uwaterloo.ca/tsp/uk/index.html Shortest possible tour to nearly every pu ...

  6. JDBC 中preparedStatement和Statement区别

    一.概念 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.PreparedStatement 和 CallableStatement三种方式 ...

  7. PP.io的三个阶段,“强中心”——“弱中心”——“去中心”

    什么是PP.io? PP.io是我和Bill发起的存储项目,目的在于为开发者提供一个去中心化的存储和分发平台,能做到更便宜,更高速,更隐私. 当然做去中心化存储的项目也有好几个,FileCoin,Si ...

  8. 从Tomcat的处理web请求分析Java的内存模型

    Tomcat作为一个java应用,同样是有主线程和子线程的.主线使用while(true)的方式一直循环,等待客户端来连接.一个客户端来了之后,就从线程池中拿一个线程来处理请求,如果没有配置线程池,就 ...

  9. 内训--PPT演示技巧

    企业内训,实操,不涉及如何做PPT,仅讲解PPT播放等内容.做好PPT后,在演讲的过程中,如何使用这些功能.

  10. 刘志梅 201771010115 《面向对象程序设计(java)》 第七周学习总结

    实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: 即将类中的域标记为private,而方法标记为public.任何声明为priv ...