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,' ...
最新文章
- 《iOS 9应用开发入门经典(第7版)》——第1章,第1.6节小结
- FPGA基础之逻辑单元(LE or LC)的基本结构
- github操作命令
- php加密码访问,怎么给一个PHP密码访问页面加超链接
- c++ stl队列初始化_创建一个向量,并将其像C ++ STL中的数组一样初始化
- C语言重难点:大端小端
- 高可用Hadoop平台-Oozie工作流之Hadoop调度
- Deming质量管理14点
- 传奇所有客户端大合集
- Python工具函数
- 中国电信9月在京推5G新号段,资费199元至599元?
- Point Estimation
- 100天搞定机器学习|day37 无公式理解反向传播算法之精髓
- sws_scale()
- 58同城陈小华:互联网新浪潮就是O2O
- Codis和Redis-cluster对比
- Jsp+Servlet基础
- 2018年,请继续燃烧你的梦想
- iphone小小总结
- 电子科大计算机学院邱航教授,电子科大教计算机研室介绍