首页 > 编程 > Python > 正文

深入理解NumPy简明教程---数组3(组合)

2020-02-23 04:11:28
字体:
来源:转载
供稿:网友

前两篇文章对NumPy数组做了基本的介绍,本篇文章对NumPy数组进行较深入的探讨。首先介绍自定义类型的数组,接着数组的组合,最后介绍数组复制方面的问题。

自定义结构数组

通过NumPy也可以定义像C语言那样的结构类型。在NumPy中定义结构的方法如下:

定义结构类型名称;定义字段名称,标明字段数据类型。

student= dtype({'names':['name', 'age', 'weight'], 'formats':['S32', 'i','f']}, align = True) 

这里student是自定义结构类型的名称,使用dtype函数创建,在第一个参数中,'names'和'formats'不能改变,names中列出的是结构中字段名称,formats中列出的是对应字段的数据类型。S32表示32字节长度的字符串,i表示32位的整数,f表示32位长度的浮点数。最后一个参数为True时,表示要求进行内存对齐。

字段中使用NumPy的字符编码来表示数据类型。更详细的数据类型见下表。

数据类型 字符编码
整数 i
无符号整数 u
单精度浮点数 f
双精度浮点数 d
布尔值 b
复数 D
字符串 S
Unicode U
Void V

在定义好结构类型之后,就可以定义以该类型为元素的数组了:

a= array([(“Zhang”, 32, 65.5), (“Wang”, 24, 55.2)], dtype =student) 

除了在每个元素中依次列出对应字段的数据外,还需要在array函数中最后一个参数指定其所对应的数据类型。

注:例子来源于张若愚的Python科学计算艺术的29页。更多关于dtype的内容请参考《NumPy for Beginner》一书的第二章。

组合函数

这里介绍以不同的方式组合函数。首先创建两个数组:

>>> a = arange(9).reshape(3,3) >>> a array([[0, 1, 2],    [3, 4, 5],    [6, 7, 8]]) >>> b = 2 * a >>> b array([[ 0, 2, 4],   [ 6, 8, 10],   [12, 14, 16]]) 

水平组合

>>> hstack((a, b)) array([[ 0, 1, 2, 0, 2, 4],   [ 3, 4, 5, 6, 8, 10],   [ 6, 7, 8, 12, 14, 16]]) 

也可通过concatenate函数并指定相应的轴来获得这一效果:

>>> concatenate((a, b), axis=1) array([[ 0, 1, 2, 0, 2, 4],   [ 3, 4, 5, 6, 8, 10],   [ 6, 7, 8, 12, 14, 16]])             
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表