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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
Python列表(list)常用操作方法小结
Feb 02 Python
详解Python中time()方法的使用的教程
May 22 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
用python打印1~20的整数实例讲解
Jul 01 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
python Paramiko使用示例
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
ADODB的数据库封包程序库
2006/12/31 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
js 操作符实例代码
2009/10/24 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
Python守护线程用法实例
2017/06/23 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python logging添加filter教程
2019/12/24 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
python如何快速拼接字符串
2020/10/28 Python
python 调用Google翻译接口的方法
2020/12/09 Python
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
大学生职业生涯规划书范文
2014/01/14 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
学校教师培训工作总结
2015/10/14 职场文书
python关于集合的知识案例详解
2021/05/30 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python