python改变数组形状_NumPy数组的变形(改变数组形状)
在机器学习以及深度学习的任务中,通常需要将处理好的数据以模型能接收的格式输入给模型,然后由模型通过一系列的运算,最终返回一个处理结果。然而,由于不同模型所接收的输入格式不一样,往往需要先对其进行一系列的变形和运算,从而将数据处理成符合模型要求的格式。
在矩阵或者数组的运算中,经常会遇到需要把多个向量或矩阵按某轴方向合并,或展平(如在卷积或循环神经网络中,在全连接层之前,需要把矩阵展平)的情况。下面介绍几种常用的数组变形方法。
修改指定数组的形状是 NumPy 中最常见的操作之一,常见的方法有很多,下表列出了一些常用函数和属性。
表1:Numpy 中改变向量形状的一些函数和属性
函数/属性
描述
arr.reshape()
重新将向量 arr 维度进行改变,不修改向量本身
arr.resize()
重新将向量 arr 维度进行改变,修改向量本身
arr.T
对向量 arr 进行转置
arr.ravel()
对向量 arr 进行展平,即将多维数组变成1维数组,不会产生原数组的副本
arr.flatten()
对向量 arr 进行展平,即将多维数组变成1维数组,返回原数组的副本
arr.squeeze()
只能对维数为1的维度降维。对多维数组使用时不会报错,但是不会产生任何影响
arr.transpose()
对高维矩阵进行轴对换
下面来看一些示例。
reshape() 函数
reshape() 函数用来改变向量的维度(不修改向量本身),请看下面的代码:
import numpy as np
arr =np.arange(10)
print(arr)
# 将向量 arr 维度变换为2行5列
print(arr.reshape(2, 5))
# 指定维度时可以只指定行数或列数, 其他用 -1 代替
print(arr.reshape(5, -1))
print(arr.reshape(-1, 5))
输出结果:
[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4]
[5 6 7 8 9]]
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
[[0 1 2 3 4]
[5 6 7 8 9]]
值得注意的是,reshape() 函数不支持指定行数或列数,所以 -1 在这里是必要的。且所指定的行数或列数一定要能被整除,例如上面代码如果修改为 arr.reshape(3,-1) 即为错误的。
resize() 函数
resize() 函数用来改变向量的维度(修改向量本身),请看下面的代码:
import numpy as np
arr =np.arange(10)
print(arr)
# 将向量 arr 维度变换为2行5列
arr.resize(2, 5)
print(arr)
输出结果:
[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4]
[5 6 7 8 9]]
T 属性
T 属性用来对向量进行转置,请看下面的的代码:
import numpy as np
arr =np.arange(12).reshape(3,4)
# 向量 arr 为3行4列
print(arr)
# 将向量 arr 进行转置为4行3列
print(arr.T)
输出结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
ravel() 函数
ravel() 函数用于向量展平,请看下面的代码:
import numpy as np
arr =np.arange(6).reshape(2, -1)
print(arr)
# 按照列优先, 展平
print("按照列优先, 展平")
print(arr.ravel('F'))
# 按照行优先, 展平
print("按照行优先, 展平")
print(arr.ravel())
输出结果:
[[0 1 2]
[3 4 5]]
按照列优先,展平
[0 3 1 4 2 5]
按照行优先,展平
[0 1 2 3 4 5]
flatten() 函数
flatten() 函数用来把矩阵转换为向量,这种需求经常出现在卷积网络与全连接层之间。
请看下面的代码:
import numpy as np
a =np.floor(10*np.random.random((3,4)))
print(a)
print(a.flatten())
输出结果:
[[4. 0. 8. 5.]
[1. 0. 4. 8.]
[8. 2. 3. 7.]]
[4. 0. 8. 5. 1. 0. 4. 8. 8. 2. 3. 7.]
squeeze() 函数
这是一个主要用来降维的函数,把矩阵中含1的维度去掉,请看下面的代码:
import numpy as np
arr =np.arange(3).reshape(3, 1)
print(arr.shape) #(3,1)
print(arr.squeeze().shape) #(3,)
arr1 =np.arange(6).reshape(3,1,2,1)
print(arr1.shape) #(3, 1, 2, 1)
print(arr1.squeeze().shape) #(3, 2)
transpose() 函数
对高维矩阵进行轴对换,这个在深度学习中经常使用,比如把图片中表示颜色顺序的 RGB 改为 GBR。
请看下面的代码:
import numpy as np
arr2 = np.arange(24).reshape(2,3,4)
print(arr2.shape) #(2, 3, 4)
print(arr2.transpose(1,2,0).shape) #(3, 4, 2)
python改变数组形状_NumPy数组的变形(改变数组形状)相关推荐
- python numpy矩阵切片_Numpy数组的索引与切片和变形拼接分裂
1.概述 今天我们来讲一下Numpy数组的索引与切片,numpy数组的索引与切片和Python中的切片与索引的作用相同,可以快速的取出数据,进行下一步的运用或者查看,但是两种切片还有一些不同的地方.另 ...
- python 矩阵列拼接_numpy数组拼接简单示例
NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: ·实际的数据 ·描述这些数据的元数据 大部分操作仅针对于元数据,而不改变底层实际的数据. 关于NumPy数组有几点必需了解的: ...
- python创建二维数组的方法_Python创建二维数组的正确姿势
本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享 List (列表)是 Python 中最基本的数据结构.在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始.因此 ...
- python中的array是什么意思_python中数组(numpy.array)的基本操作
为什么要用numpy Python中提供了list容器,可以当作数组使用.但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3].就需要三个指针和三 ...
- 【python与数据分析】NumPy数值计算基础1——numpy数组及其运算
目录 前言 一.创建数组 二.测试两个数组的对应元素是否足够接近 三.修改数组中的元素值 四.数组与标量的运算 五.数组与数组的运算 六.数组排序 七.数组重复 八.数组转置 九.数组所有元素累计和与 ...
- 《利用Python》进行数据分析:Numpy基础2 创建数组
import numpy as np #创建数组data1=[6,7.5,8,0,1]arr1=np.array(data1)print(arr1) data2=[[1,2,3,4],[5,6,7,8 ...
- Python 数据分析三剑客之 NumPy(二):数组索引 / 切片 / 广播 / 拼接 / 分割
CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...
- numpy的基本使用 附python代码详细讲解(numpy函数,创建数组,常用属性,索引切片,数组的复制,修改维度,数组的分割、拼接、转置)
目录 使用array创建数组 使用arange创建数组 Numpy中的随机数创建 ndarray对象的常用属性 其他方式创建数组 索引和切片(一位数组.二维数组) 数组的复制 修改数组的维度 数组的拼 ...
- python建立复数数组_深入理解NumPy简明教程---数组1
目前我的工作是将NumPy引入到Pyston中(一款Dropbox实现的Python编译器/解释器).在工作过程中,我深入接触了NumPy源码,了解其实现并提交了PR修复NumPy的bug.在与Num ...
- Python多个数组合并(拼接)为一个数组
Python中多个数组合并为一个数组的方法整理. extend方法 该方法可以扩展数组,会改变原始数组. a = [1,2,3,4,7,5,6] b = ['a','b'] c = ['h',12,' ...
最新文章
- IBM Thinkpad T43-44U 升级到 2G 内存后少了 66M
- idea中Could not autowire. No beans of 'xxxxMapper' type found.问题解决
- windows7下硬盘安装32位ubuntu12.04LTS
- 装修(十三天,面板又换错了,大理石空鼓)
- BugKuCTF 杂项 telnet
- 构造函数的执行序列(读书笔记)
- 5G的场景、需求、通信速率
- vb.net 与 c# 的switch ... case ...的一个重要区别
- 动态规划(五)——0/1背包
- php mysql_fetch_array 不要0_1_php – mysql_fetch_array不适用于1行查询结果
- C语言指针超全面透析(原来你一直没有搞懂C语言指针是因为没有理解其中的规律)
- fastReport 绑定DataBand数据源后还是打印出一条数据
- navicat建mysql数据库密码_Navicat修改MySQL数据库密码的多种方法
- 2010年10月14日糗事TOP10
- ​携程网全国各城市酒店数据​评论数据
- SpringSecurity之SecurityContext和Authentication对象
- 高中教师计算机面试什么时候,高中信息技术教师资格证备考经验分享(面试篇)...
- 传智播客推出少儿教育品牌-酷丁鱼
- 在Adapter里子线程更新UI线程
- 终于有人把云计算、大数据和 AI 讲明白了【深度好文】
热门文章
- vue-router 判断是否登陆,未登录跳转登陆页面
- 少儿Python编程6-计算机数据结构和算法
- Jensen–Shannon divergence
- 前端学习笔记一:HTML(1)预备知识及一个简单的网页
- docker安装ElasticSearch8.1.0错误curl: (52) Empty reply from server的处理方法
- 看看老牛是如何给陈彤写的信的
- FinClip 8月小报丨小程序转 App 支持增加第三方 SDK 配置
- Latex/WinEdt中文编辑
- PyCharm:安装/搭建/配置/插件
- NetXpert XG帮您解决“布线安装与维护”难题