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实现的径向基(RBF)神经网络示例
Feb 06 Python
对python3 urllib包与http包的使用详解
May 10 Python
python读写LMDB文件的方法
Jul 02 Python
python生成九宫格图片
Nov 19 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
如何基于python实现脚本加密
Dec 28 Python
python实现logistic分类算法代码
Feb 28 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
使用TensorBoard进行超参数优化的实现
Jul 06 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 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实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python基于twisted实现简单的web服务器
2014/09/29 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python的迭代器和生成器
2015/07/29 Python
利用python求相邻数的方法示例
2017/08/18 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
淘宝客服工作职责
2014/07/11 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
浅谈Python中对象是如何被调用的
2022/04/06 Python