我们知道,在python中,是可以用list(列表)来保存一组值,作为数组来用。但是对于python的列表来说,列表中的元素可以是任意的对象,这就意味着,你在列表中保存的,实际上是指针,然后指针指向了你想保存的元素。如果进行数值运算的话,是比较浪费内存的。当然,python中存在array模块,但是,它是不支持多维运算的,也没有一些常用的运算函数,因此不适合做数值运算。
numpy的出现,弥补了python的这些不足。它提供了两种基本对象:ndarray(n-dimensional array object) 与 ufunc(universal function object).ndarray就是可以用来存储单一数据类型的多维数组,而ufunc则是对数组进行处理的函数。
一 ndarray对象的创建
ndarray对象的创建一般有如下几种形式:
1)直接创建。
例如np.array([1,2,3]) 或者 c=np.array([2,4],[5,6],[8,10]),这样,就创建了一维或者多维的数组;
2)arange创建
arange([start,] stop[, step,], dtype=None)
其中stop是必选的,其他都是可选。start是起始值,所要输出值里包含该起始值,但是不包含stop结束值。dtype是指定要输出的数据类型,如果不指定的话,就会根据其他的类型进行判断。
例如:
Examples
--------
>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(3.0)
array([ 0., 1., 2.])
>>> np.arange(3,7)
array([3, 4, 5, 6])
>>> np.arange(3,7,2)
array([3, 5])
3) linspace()创建
linspace(start, stop, num=50, endpoint=True, retstep=False)
start,stop跟array类似,num默认是50,endpoint为true时,stop是最后的一个值;当retstep为true时,会返回数组值和间距值。
例如:
Examples
--------
>>> np.linspace(2.0, 3.0, num=5)
array([ 2. , 2.25, 2.5 , 2.75, 3. ])
>>> np.linspace(2.0, 3.0, num=5, endpoint=False)
array([ 2. , 2.2, 2.4, 2.6, 2.8])
>>> np.linspace(2.0, 3.0, num=5, retstep=True)
(array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
zeros()
zeros(shape, dtype=float, order='C')
shape:整数值,或者整数的序列值
类型dtype默认为float
order一般不用改。
Examples
--------
>>> np.zeros(5)
array([ 0., 0., 0., 0., 0.])
>>> np.zeros((5,), dtype=numpy.int)
array([0, 0, 0, 0, 0])
>>> np.zeros((2, 1))
array([[ 0.],
[ 0.]])
>>> s = (2,2)
>>> np.zeros(s)
array([[ 0., 0.],
[ 0., 0.]])
ones()
ones(shape, dtype=None, order='C')
与zeros()想类似
例子:
Examples
--------
>>> np.ones(5)
array([ 1., 1., 1., 1., 1.])
>>> np.ones((5,), dtype=np.int)
array([1, 1, 1, 1, 1])
>>> np.ones((2, 1))
array([[ 1.],
[ 1.]])
>>> s = (2,2)
>>> np.ones(s)
array([[ 1., 1.],
[ 1., 1.]])
empty()
empty(shape, dtype=float, order='C')
与zeros()相类似
np.empty([2, 2])
此外,还有ones_like,ones_like等,用来完全的复制原先的数组。从函数名称就可以猜出其作用来。
5)eyes()
eye(N, M=None, k=0, dtype=<type 'float'>)
功能是给出一个二维数组,二维数组的对角线是1,其余都是0.
其中,N是行数,M是列数。M在默认的情况下可以忽略,默认值是N。k默认是0,标志着最正对的对角线是0。当k>0的时候,就上移,当k<0时,就可以下移。dtype就是可以设置数值类型。
例如
Examples
--------
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]])
>>> np.eye(3, k=1)
array([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 0., 0.]])
二 numpy中数组的一些属性以及取值的方法
1)ndarray的属性
shape函数
shape函数用来计算数组的各个值的长度,返回值是一个元组。
形状的计算从第一维开始计算,知道最后一个维度位置。
例如
np.shape([0]) 只有一个维度,因此值是
(1,)
np.shape([[1, 2]])有两个维度,因此,值是
(1, 2)
shape计算出了数组的属性,而通过reshape可以来改变这个属性
2)存取元素
通过切片[]来存取数组,是最常见的对数组的操作方式。(切片包含开始值,但是不包含结束值)
当数组有多维时,需要在每个维度上选取值,每个维度间用逗号来进行分割。当某个维度没有选择时,默认选择所有值。
例如:
a=array([[2,3,4,5],[5,6,7,8],[6,4,2,4]])
>>> a
array([[2, 3, 4, 5],
[5, 6, 7, 8],
[6, 4, 2, 4]])
a[0:2] 只选择第一个维度的前两个,第二个维度全选
array([[2, 3, 4, 5],
[5, 6, 7, 8]])
a[0:2,1:3] 选择第一个维度的0,1,第二个维度的1,2
array([[3, 4],
[6, 7]])