Python reshape的用法及多个二维数组合并为三维数组的实例


Posted in Python onFebruary 07, 2020

reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变。是对每行元素进行处理

resize(shape) : 与.reshape()功能一致,但修改原数组

In [1]: a = np.arange(20)
#原数组不变
In [2]: a.reshape([4,5])
Out[2]:
array([[ 0, 1, 2, 3, 4],
  [ 5, 6, 7, 8, 9],
  [10, 11, 12, 13, 14],
  [15, 16, 17, 18, 19]])
 
In [3]: a
Out[3]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
  17, 18, 19])
 
#修改原数组
In [4]: a.resize([4,5])
 
In [5]: a
Out[5]:
array([[ 0, 1, 2, 3, 4],
  [ 5, 6, 7, 8, 9],
  [10, 11, 12, 13, 14],
  [15, 16, 17, 18, 19]])

.swapaxes(ax1,ax2) : 将数组n个维度中两个维度进行调换,不改变原数组

In [6]: a.swapaxes(1,0)
Out[6]:
array([[ 0, 5, 10, 15],
  [ 1, 6, 11, 16],
  [ 2, 7, 12, 17],
  [ 3, 8, 13, 18],
  [ 4, 9, 14, 19]])

.flatten() : 对数组进行降维,返回折叠后的一维数组,原数组不变

In [7]: a.flatten()
Out[7]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
  17, 18, 19])

将多个二维数组合并为一个三维数组

方法一:

对于两个(或者多个)同一维度的矩阵,直接利用np.array()重新构造一个array,这样可以变相起到扩展维数的作用。例如:

import numpy as np
 
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[2,2,3],[4,5,6]])
c = np.array([[3,2,3],[4,5,6]])
print('矩阵a:\n',a)
print('维数:',a.shape)
 
com = np.array([a,b,c])
print('合并矩阵:\n',com)
print('维数:',com.shape)
 
输出结果为:
 
矩阵a:
 [[1 2 3]
 [4 5 6]]
维数: (2, 3)
合并矩阵:
 [[[1 2 3]
 [4 5 6]]
 
 [[2 2 3]
 [4 5 6]]
 
 [[3 2 3]
 [4 5 6]]]
维数: (3, 2, 3)

方法二:

但是,如果两个array,使用方法一时会出现如下结果:

import numpy as np
 
aa = np.array([[[1,2,3],[4,5,6]],[[2,2,3],[4,5,6]],[[3,2,3],[4,5,6]]])
a = np.array([[4,2,3],[4,5,6]])
 
com = np.array([aa,a])
print('合并矩阵:\n',com)
print('维数:',com.shape)
 
输出结果:
 
合并矩阵:
 [array([[[1, 2, 3],
  [4, 5, 6]],
 
  [[2, 2, 3],
  [4, 5, 6]],
 
  [[3, 2, 3],
  [4, 5, 6]]])
 array([[4, 2, 3],
  [4, 5, 6]])]
维数: (2,)

可以看到:输出的维数不对,以上方法就不适用了。

那么,我们就需要利用np.append和array.reshape()函数对数组进行拼接之后重组,具体实现如下:

import numpy as np
 
aa = np.array([[[1,2,3],[4,5,6]],[[2,2,3],[4,5,6]],[[3,2,3],[4,5,6]]])
a = np.array([[4,2,3],[4,5,6]])
data = np.append(aa,a)#先拼接成一个行向量
print(data)
 
dim = aa.shape#获取原矩阵的维数
print('原矩阵维数:',dim)
data1 = data.reshape(dim[0]+1,dim[1],dim[2])#再通过原矩阵的维数重新组合
 
print('合并矩阵:\n',data1)
print('维数:',data1.shape)

现在来看一下用reshape将二维数据升为三维后的数据分布情况:

import numpy as np
b = np.arange(36).reshape((6,6))
b1 = b.reshape(2,3,6)

b的元素:

Python reshape的用法及多个二维数组合并为三维数组的实例

b1的元素:

Python reshape的用法及多个二维数组合并为三维数组的实例

可以看到,原来6*6的矩阵被分为了2个3*6的矩阵。每一行的数据分布并没有改变,只是将前3行划为一个维度,然后将后三行划为另一个维度。

b1.reshape(6,6)

如果用这条命令,则数据又被还原了回去,与b的一样。

b1.reshape(3,12)

Python reshape的用法及多个二维数组合并为三维数组的实例

如果用的是reshape(3,12),则相当于将数据首先拉伸为1维的,然后再将一维数据重组为3*12

方法三:

相比于前两种方法,这种方法可谓“曲线救国”之典范,具体思路是:先转化成list,拼接后再转化回去。

这是因为list中的append()函数可以在添加函数的时候不改变原来list的维度。虽然没有对这种方法进行一个速度测试,但直觉来看时间复杂度挺高的,建议慎用。

aa = np.array([[[1,2,3],[4,5,6]],[[2,2,3],[4,5,6]],[[3,2,3],[4,5,6]]])
a = np.array([[4,2,3],[4,5,6]])
 
#将array转换成list
aa = aa.tolist(aa)
a = a.list(a)
 
aa.append(a)#注意与方法二中np.append()用法的区别
com = np.array(aa)
print(com.shape)
 
输出结果:
 
合并矩阵:
  [[[1 2 3]
  [4 5 6]]
 
  [[2 2 3]
  [4 5 6]]
 
  [[3 2 3]
  [4 5 6]]
  
  [[4 2 3]
  [4, 5, 6]]]
维数: (4,2,3)

这里注意:

两种类型的相互转换函数:

array转list:a = a.tolist()

list转array:a =np.array(a)

以上这篇Python reshape的用法及多个二维数组合并为三维数组的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符串中查找子串小技巧
Apr 10 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
Python的语言类型(详解)
Jun 24 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
详解django中url路由配置及渲染方式
Feb 25 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
Python中time标准库的使用教程
Apr 13 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 #Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 #Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 #Python
详解python itertools功能
Feb 07 #Python
Python中itertools的用法详解
Feb 07 #Python
Python转换itertools.chain对象为数组的方法
Feb 07 #Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 #Python
You might like
多php服务器实现多session并发运行
2006/10/09 PHP
php数字游戏 计算24算法
2012/06/10 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
js字符编码函数区别分析
2008/06/05 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
python验证码识别实例代码
2018/02/03 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python Django 创建应用过程图示详解
2019/07/29 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
Hotels.com南非:酒店预订
2017/11/02 全球购物
社区七一党员活动方案
2014/01/25 职场文书
初中优秀学生评语
2014/12/29 职场文书
会议欢迎词范文
2015/01/27 职场文书
个人年底工作总结
2015/03/10 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python