Python之numpy数组学习(一)

浏览: 1789


前言

前面已经安装并学习了Python中的科学计算库,今天主要学习下numpy数组。

Numpy数组对象

Numpy中的多维数组称为ndarray,它有两个组成部分。

  • 数据本身。

  • 描述数据的元数据。

在数组的处理过程中,原始数据不受影响,变化的只是元数据。

Numpy数组通常是由相同种类的元素组成,即数组中数据类型必须一致。好处是:数组元素类型相同,可轻松确定存储数组所需的空间大小。同时,numpy可运用向量化运算来处理整个数组。Numpy数组的索引从0开始。(这里我使用的是ipython命令行,ipython最近刚开始用,以后详细介绍下。)

In [3]: import numpy as np

In [4]: a = np.arange(5)

In [5]: a.dtype

Out[5]: dtype('int32')

上面数组的数据类型为int32,这一般跟你安装的Python版本有关。不过我安装的是64位,不知道怎么回事这里是int32,后面再检查下。

上一篇我们说了向量(一维的numpy数组)的创建方法,下面看一下上面生成的向量。

In [6]: a

Out[6]: array([0, 1, 2, 3, 4])

In [7]: a.shape

Out[7]: (5,)

可以看到,该向量有5个元素,该数组的shape属性是一个元组,存放的是数组在每一个维度的长度。

创建多维数组

我们已经知道了如何创建向量,下面开始建立多维numpy数组,生成矩阵后,再看它的形状。

In [8]: m = np.array([np.arange(2),np.arange(2)])

In [9]: m

Out[9]:

array([[0, 1],

      [0, 1]])

上面我们用arrange方法创建了一个简单的2*2的数组,利用array()函数创建数组时,需要传递给它一个对象,并且这个对象必须是数组类型。如Python的列表。

创建之后,我们要选择矩阵的元素,这里就相当于一个二维坐标系,我们只要找到对应的坐标即可。

In [10]: m[0,0]

Out[10]: 0

In [11]: m[0,1]

Out[11]: 1

In [12]: m[1,0]

Out[12]: 0

In [13]: m[1,1]

Out[13]: 1

可以看到,选择数组元素很简单,对于数组m,只要通过m[m,n]的形式,就能访问数组内的元素,其中m和n为数组元素的下标,从0开始。

Numpy的数值类型

Python本身支持整型、浮点型和复数型,为了科学计算,numpy提供了更加丰富的数据类型,注意:numpy跟数学运算有关的数据类型的名称都以数字结尾。这个数字指示了该类型的变量所占用的二进制位数。Numpy的各种数值类型如下图所示:

图片.png

每一种数据类型都有相应的转换函数,许多函数都带有一个指定数据类型的参数,该参数一般可选。

In [15]: np.float64(30)

Out[15]: 30.0

In [16]: np.bool(30)

Out[16]: True

In [17]: np.float(True)

Out[17]: 1.0

In [18]: np.int8(30)

Out[18]: 30

In [20]: np.arange(7, dtype='uint16')

Out[20]: array([0, 1, 2, 3, 4, 5, 6],dtype=uint16)

注意:不允许把复数转化成整型。也不允许把复数转化为浮点数,但是允许把浮点数转化为复数。复数的实部和虚部分别使用real()函数和imag()函数提取。

数据类型对象是numpy.dtype类的实例。数组是一种数据类型。数据类型对象表明了数据占用的字节数,所占用字节的具体数目一般存放在类dtype的itemsize中。

In [6]: import numpy as np

In [7]: a = np.arange(5)

In [8]: a

Out[8]: array([0, 1, 2, 3, 4])

In [9]: a.dtype.itemsize

Out[9]: 4

一维数组的切片和索引

一维numpy数组的切片操作和Python列表的切片一样,看一下下面的例子来体验一下。

In [34]: a = np.arange(9)

In [35]: a

Out[35]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

#通过下标取数据

In [36]: a[3:7]

Out[36]: array([3, 4, 5, 6])

#用下标选择元素,范围0到7,下标每次递增2

In [37]: a[:7:2]

Out[37]: array([0, 2, 4, 6])

#反转数组

In [38]: a[::-1]

Out[38]: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

小结

今天学习一下Python中numpy的简单使用。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

欢迎关注微信公众号,访问更多精彩:AiryData

如需转载,请联系授权,谢谢合作。

推荐 0
本文由 Airy 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册