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编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
在Python中操作字典之fromkeys()方法的使用
May 21 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
django启动uwsgi报错的解决方法
Apr 08 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
python实现的解析crontab配置文件代码
2014/06/30 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
python 模拟登录B站的示例代码
2020/12/15 Python
公司市场部岗位职责
2013/12/02 职场文书
厂长岗位职责
2014/02/19 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
2015教师见习期工作总结
2014/12/12 职场文书