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动态监控日志内容的示例
Feb 16 Python
Python爬取网易云音乐热门评论
Mar 31 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
python实现手机通讯录搜索功能
Feb 22 Python
Python中的单继承与多继承实例分析
May 10 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
python实现XML解析的方法解析
Nov 16 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
python 通过使用Yolact训练数据集
Apr 06 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
PHP正则验证Email的方法
2015/06/15 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
python爬虫用mongodb的理由
2020/07/28 Python
经济学人订阅:The Economist
2018/07/19 全球购物
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
财务审计整改报告
2014/11/06 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
感恩教育主题班会
2015/08/12 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL