numpy数组拼接简单示例


Posted in Python onDecember 15, 2017

NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:

·实际的数据

·描述这些数据的元数据

大部分操作仅针对于元数据,而不改变底层实际的数据。

关于NumPy数组有几点必需了解的:

·NumPy数组的下标从0开始。

·同一个NumPy数组中所有元素的类型必须是相同的。

NumPy数组属性

在详细介绍NumPy数组之前。先详细介绍下NumPy数组的基本属性。NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

NumPy的数组中比较重要ndarray对象属性有:

1.ndarray.ndim:数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵)。

2.ndarray.shape:数组的维度。为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。ndarray.shape返回一个元组,这个元组的长度就是维度的数目,即ndim属性。

3.ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积。

4.ndarray.dtype:表示数组中元素类型的对象,可使用标准的Python类型创建或指定dtype。另外也可使用前一篇文章中介绍的NumPy提供的数据类型。

5.ndarray.itemsize:数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(float64占用64个bits,每个字节长度为8,所以64/8,占用8个字节),又如,一个元素类型为complex32的数组item属性为4(32/8)。

6.ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

数组拼接方法一

思路:首先将数组转成列表,然后利用列表的拼接函数append()、extend()等进行拼接处理,最后将列表转成数组。

示例1:

>>> import numpy as np
>>> a=np.array([1,2,5])
>>> b=np.array([10,12,15])
>>> a_list=list(a)
>>> b_list=list(b)
>>> a_list.extend(b_list)
>>> a_list
[1, 2, 5, 10, 12, 15]
>>> a=np.array(a_list)
>>> a
array([ 1, 2, 5, 10, 12, 15])

该方法只适用于简单的一维数组拼接,由于转换过程很耗时间,对于大量数据的拼接一般不建议使用。

数组拼接方法二

思路:numpy提供了numpy.append(arr,values,axis=None)函数。对于参数规定,要么一个数组和一个数值;要么两个数组,不能三个及以上数组直接append拼接。append函数返回的始终是一个一维数组。

示例2:

>>> a=np.arange(5)
>>> a
array([0, 1, 2, 3, 4])
>>> np.append(a,10)
array([ 0, 1, 2, 3, 4, 10])
>>> a
array([0, 1, 2, 3, 4])
 
>>> b=np.array([11,22,33])
>>> b
array([11, 22, 33])
>>> np.append(a,b)
array([ 0, 1, 2, 3, 4, 11, 22, 33])
 
>>> a
array([[1, 2, 3],
    [4, 5, 6]])
>>> b=np.array([[7,8,9],[10,11,12]])
>>> b
array([[ 7, 8, 9],
    [10, 11, 12]])
>>> np.append(a,b)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

numpy的数组没有动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中。

数组拼接方法三

思路:numpy提供了numpy.concatenate((a1,a2,...),axis=0)函数。能够一次完成多个数组的拼接。其中a1,a2,...是数组类型的参数

示例3:

>>> a=np.array([1,2,3])
>>> b=np.array([11,22,33])
>>> c=np.array([44,55,66])
>>> np.concatenate((a,b,c),axis=0) # 默认情况下,axis=0可以不写
array([ 1, 2, 3, 11, 22, 33, 44, 55, 66]) #对于一维数组拼接,axis的值不影响最后的结果
 
>>> a=np.array([[1,2,3],[4,5,6]])
>>> b=np.array([[11,21,31],[7,8,9]])
>>> np.concatenate((a,b),axis=0)
array([[ 1, 2, 3],
    [ 4, 5, 6],
    [11, 21, 31],
    [ 7, 8, 9]])
>>> np.concatenate((a,b),axis=1) #axis=1表示对应行的数组进行拼接
array([[ 1, 2, 3, 11, 21, 31],
    [ 4, 5, 6, 7, 8, 9]])

对numpy.append()和numpy.concatenate()两个函数的运行时间进行比较

示例4:

>>> from time import clock as now
>>> a=np.arange(9999)
>>> b=np.arange(9999)
>>> time1=now()
>>> c=np.append(a,b)
>>> time2=now()
>>> print time2-time1
28.2316728446
>>> a=np.arange(9999)
>>> b=np.arange(9999)
>>> time1=now()
>>> c=np.concatenate((a,b),axis=0)
>>> time2=now()
>>> print time2-time1
20.3934997107

可知,concatenate()效率更高,适合大规模的数据拼接

总结

以上就是本文关于numpy数组拼接简单示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python学习入门细节知识点
Mar 29 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
破解安装Pycharm的方法
Oct 19 Python
python for循环输入一个矩阵的实例
Nov 14 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
用python修改excel表某一列内容的操作方法
Jun 11 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
Python开发五子棋小游戏
May 02 Python
浅谈numpy数组的几种排序方式
Dec 15 #Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 #Python
python导入csv文件出现SyntaxError问题分析
Dec 15 #Python
python matplotlib中文显示参数设置解析
Dec 15 #Python
MAC中PyCharm设置python3解释器
Dec 15 #Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 #Python
python绘制双柱形图代码实例
Dec 14 #Python
You might like
杏林同学录(九)
2006/10/09 PHP
Ajax PHP分页演示
2007/01/02 PHP
关于页面优化和伪静态
2009/10/11 PHP
php入门教程 精简版
2009/12/13 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
可插入图片的TEXT文本框
2013/12/27 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
python的Template使用指南
2014/09/11 Python
Python实现Kmeans聚类算法
2020/06/10 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
财务会计专业毕业生自荐信
2013/10/02 职场文书
工商管理本科毕业生求职信范文
2013/10/05 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
导游词开场白
2015/01/31 职场文书
如何写辞职书
2015/02/26 职场文书
会计做账心得体会
2016/01/22 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL