Numpy库

       用列表list保存一组值,可当做数组使用,但由于列表的元素可是任何对象,因此,列表中保存的是对象的指针。因此,为保存一个简单的列表[1,2,3],需要有三个指针和三个整数对象。对数值运算来说,这种结构比较浪费内存和CPU计算时间。

       Python还提供了array模块,array与列表不同,能直接保存数值,和C语言的一维数组类似。但是它不支持多维数组,也无各种运算函数,因此,也不适合做数值运算。

      NumPy提供了两种基本的对象:ndarray和ufunc。ndarray(数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。


ndarray对象

首先需要导入NumPy库。(import numpy as np)

1.创建数组

(1)可通过给array()函数传递Python的序列对象来创建数组。若传递的是多层嵌套的序列,将创建多维数组(下例中的c)。

import numpy as np
a=np.array([1,2,3,4])
b=np.array((1,2,3,4))
c=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]])
print a
print b
print c
在Spyder中运行后显示:
[1 2 3 4]

[5 6 7 8]

[[ 1  2  3  4]
 [ 4  5  6  7]
 [ 7  8  9 10]]
数组的形状可通过shape属性获得,它是一个描述数组各个轴长度的元组(tuple). (属性由对象调用)
>>>a.shape
(4,)
>>>c.shape
(3,4)
(第0轴的长度为3,第一轴的长度为4)
可通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。下面将数组c的shape属性改为(4,3),注意,从(3,4)改成(4,3)只是改变每个轴的大小,数组元素在内存中的位置并没有改变。
>>>c.shape=(4,3)
>>>c
[[1,2,3],
[4,4,5],
[6,7,7],
[8,9,10] ]
当设置某个轴的元素个数为-1时,将自动计算此轴的长度。由于数组c的与元素个数为12,因此下面的程序将数组c的shape属性改为了(2,6)
>>>c.shape=(2,-1)
>>>c
[[1,2,3,4,4,5]
[6,7,7,8,9,10]]
使用数组的reshape()方法,可创建指定形状的新数组,而原数组的形状保持不变。但是新数组和原数组共享数据存储空间,因此修改其中任意一个数组的元素都会同时修改另一个数组的内容
>>>d=a.reshape((2,2))#也可是a.reshape(2,2)
>>>d
[[1,2]
 [3,4]]
>>>a[0]=2 #将数组a的第0个元素改为2,注意d的第0个元素也改为了2
>>>d
[[2,2]
 [3,4]]
数组的元素类型可通过dtype属性获得。可通过dtype参数在创建数组时指定元素类型。
采用array方法首先需要创建一个序列对象,然后通过array()将其转换为数组。这样做显然效率不高。因此Numpy提供了很多专门用于创建数组的函数。
(2)arange()函数类似于内置函数range(),通过指定开始值、终值和步长创建等差数列的一维数组,注意得到的结果数组不包含终值。
>>>np.arange(0,1,0.1)
[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
(终值1不在数组内)
(3)linspace()通过指定开始值、终值和元素个数创建等差数列的一维数组,可通过endpoint参数指定是否包含终值,默认值为True,即包含终值。
>>>np.linspace(0,1,10)#步长为1/9
>>>np.linspace(0,1,endpoint=False)#步长为1/10
(4)logspace()和linspace类似,不过它所创建的数组时等比数列。基数可通过参数base指定,默认值为10.
(5)zeros(),ones(),empty()可创建指定形状和类型的数组。empty()仅仅分配数组所使用的内存,不对数组元素进行初始化操作,因此它的运行速度是最快的。zeros()将数组元素初始化为0,ones()将数组元素初始化为1.下面穿件一个形状为(2,3),元素类型为整数的数组:
>>>np.empty((2,3),np.int)
(6)zeros_like(),ones_like(),empty_like()等函数可创建与参数数组形状及类型相同的数组。即zeros_like(a)和zeros(a.shape,a.dtype)效果相同。
2.存取元素
可使用与列表相同的方式对数组元素进行存取:
>>>a=np.arange(0,10,1)
[0,1,2,3,4,5,6,7,8,9]
>>>a[5] #用整数作为下标可获取数组中的某个元素
5
>>>a[3:5]#用切片作为下标可获取数组的一部分,包括a[3]但不包括a[5]
[3,4]
>>>a[:5]#切片中省略开始下标,表示从a[0]开始
[0,1,2,3,4]
>>>a[:-1]#下标可以使用负数,表示从数组最后往前数
[0,1,2,3,4,5,6,7,8]
未完待续





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值