• 改变数组形状(shape、transpose)--numpy


    1. reshape()函数

    1.1 函数功能

    在不改变数组数据的情况下,更改数组的形状

    1.2 函数语法

    reshape(a, newshape, order='C')
    
    • 1

    1.3 函数参数与示例

    1.3.1 参数:a与newshape

    参数含义
    a要改变形状的数组
    newshape数组形状参数,取值为整数或整数组成的元组;这个形状所需的数据个数应与数组a中数据个数相同。当取值为整数时,转换为一维数组;取值为元组时,转换为对应形状的数组;若想转换为一维数组,除了使用数组a大小(size)的整数还可以使用值-1,这时将根据数组推断长度并转换
    1) 将一维数组转换为二维
    a = np.arange(8)
    print('原始数组a:', a, sep='\n')
    # 改变数组形状为(4,2)
    a1 = np.reshape(a, (4, 2))
    print('转换为(4,2)的数组a1:', a1, sep='\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2) 将二维数组转换为一维数组
    b = np.array([[1, 2, 3], [4, 7, 8]])
    print('数组b: ', b, sep='\n')
    # 将b转化为一维数组
    # 1.方法一:形状为原始数组size的整数
    b1 = np.reshape(b, 6)
    print('转换为一维数组的b1: ', b1, sep='\n')
    # 2. 方法二: 形状设置为-1
    b2 = np.reshape(b, -1)
    print('转换为一维数组的b1: ', b2, sep='\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    1.3.2 参数: order

    参数含义
    a要改变形状的数组
    newshape数组形状参数,取值为整数或整数组成的元组;这个形状所需的数据个数应与数组a中数据个数相同。当取值为整数时,转换为一维数组;取值为元组时,转换为对应形状的数组;若想转换为一维数组,除了使用数组a大小(size)的整数还可以使用值-1,这时将根据数组推断长度并转换
    order读取数组a的方式。默认采用“C”方式。取值为C时,读取和写入数据先把最后轴读完然后依次向第一轴;取值为F时,先将第一轴读完/写完,然后第二轴,依次进行到最后一轴;取值为A时,表示读取和写入的方式与内存中数组a的存储方式一致;order的取值既规定了读取方式也规定了写入方式
    1) 将二维数组转换为一维数组
    import numpy as np
    
    c = np.array([[[1, 2, 3], [4, 7, 8]], [[11, 12, 13], [14, 17, 18]]])
    print('数组c:', c, sep='\n')
    c1 = np.reshape(c, 12, order='C')
    print('以C的方式读取转换后的数组c1:', c1, sep='\n')
    
    c2 = np.reshape(c, 12, order='F')
    print('以F的方式读取转换后的数组c2:', c2, sep='\n')
    
    # c2 = np.reshape(c1,(2,6),order='F')
    # print('输出数组c2: ',c2,sep='\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    2) 将一维数组转换为二维数组
    d = np.arange(0, 12)
    print('数组d: ', d, sep='\n')
    d1 = np.reshape(d, (4, 3), order='C')
    print('以C的方式写入数据得到数组d1: ', d1, sep='\n')
    d2 = np.reshape(d, (4, 3), order='F')
    print('以C的方式写入数据得到数组d2: ', d2, sep='\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3) 三维数组转换为二维数组
    import numpy as np
    
    c = np.array([[[1, 2, 3], [4, 7, 8]], [[11, 12, 13], [14, 17, 18]]])
    print('数组c:', c, sep='\n')
    c1 = np.reshape(c, (6, 2), order='C')
    print('以C的方式读取转换后的数组c1:', c1, sep='\n')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    order取值为C ,以最后一个轴axis=2优先的方向读取和写入数据
    在这里插入图片描述

    order取值为F ,以第一个轴axis=0优先的方向读取和写入数据

    
    c2 = np.reshape(c, (6, 2), order='F')
    print('以C的方式读取转换后的数组c2:', c2, sep='\n')
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    1.4 返回值

    返回指定形状的数组

    2. transpose()函数

    2.1 函数功能

    返回轴转置的数组,对于一维数组转置之后返回原数组相同的view数组;对于二维数组,就是矩阵转置,m行n列,转换为n行m列;对于三维及以上数组,需要看是否指定轴

    2.2 函数语法

    numpy.transpose(a, axes=None)
    
    • 1

    2.3 函数参数与示例

    含义参数
    a要转置的数组
    axes取值为None或者没有参数,新数组形状为原数组轴的顺序反转 ;取值为元组
    1) 不指定axes,数组反转
    import numpy as np
    
    c = np.array([[[1, 2, 3], [4, 7, 8]], [[11, 12, 13], [14, 17, 18]]])
    print('数组c(2x2x3):', c, sep='\n')
    # 1. 无输入参数
    c1 = c.transpose()  
    print('以C的方式读取转换后的数组c1(3x2x2):', c1, sep='\n')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    在这里插入图片描述

    2) 指定轴的顺序
    import numpy as np
    
    c = np.array([[[1, 2, 3, 0], [4, 7, 8, 9], [1, 1, 1, 1]],
                  [[11, 12, 13, 10], [14, 17, 18, 15], [2, 2, 2, 2]]])
    print('数组c(2x3x4):', c, sep='\n')
    # 1. 无输入参数
    c1 = np.transpose(c, (1, 2, 0))
    print('以C的方式读取转换后的数组c1(3x4x2):', c1, sep='\n')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    2.4 返回值

    转置后的数组,该数组是原数组的view。与原数组与转置后的数组是不同的对象,但是共享同一块儿内存区域,改变转置数据的值原始数组也会改变。

  • 相关阅读:
    OpenCV(三十二):轮廓检测
    使用(七牛云)为例子实现将文件上传到云服务器
    windows服务器证书算法升级
    A-Level 化学例题解析及练习Atomic Structure
    Vue2 实战 基于 Elmenet-UI 的 单页面开发 用户信息增删改查 | 支持分页查询 | 自动登录
    基于SqlSugar的开发框架循序渐进介绍(20)-- 在基于UniApp+Vue的移动端实现多条件查询的处理
    Python操作Hive数据仓库
    linux开发板中的数据存储和读取操作
    通过python股票接口把数据导入Mysql数据库
    【日常业务开发】Java实现异步编程
  • 原文地址:https://blog.csdn.net/chongbaikaishi/article/details/127131810