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中执行shell命令的几个方法小结
Sep 18 Python
python网络编程之文件下载实例分析
May 20 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 Python
Python计时相关操作详解【time,datetime】
May 26 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
python实现BP神经网络回归预测模型
Aug 09 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
pandas分组聚合详解
Apr 10 Python
python 调用js的四种方式
Apr 11 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项目的方法
2006/10/09 PHP
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
javascript静态的url如何传递
2007/05/03 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
javaScript中的空值和假值
2017/12/18 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
使用python接入微信聊天机器人
2020/03/31 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
四年级学生期末评语
2014/12/26 职场文书
Django与数据库交互的实现
2021/06/03 Python