numpy:入门

来源:互联网 发布:mac双系统修复windows 编辑:程序博客网 时间:2024/06/06 10:38

为什么需要numpy:Python中的l数据类型list占用资源过大,不适合做大量计算;数据类型array又只能存储一维数组。所以引入numpy来处理多维数组的存储和计算。

一.创建数组(ndarray)

1.直接创建

np.array(object)

>>> import numpy as np>>> a=np.array([[0,1,2],[1,2,3]])>>> aarray([[0, 1, 2],       [1, 2, 3]])

2.利用内置函数

np.zeros(shape),np.ones(shape),np.arange(start,stop,step),np.linspace(start,stop,num=50),np.random.rand(do,d1,.,dn),np.random.randint(low,high,size=None)

>>> np.zeros((2,2))array([[ 0.,  0.],       [ 0.,  0.]])>>> np.ones((2,2))array([[ 1.,  1.],       [ 1.,  1.]])>>> np.arange(0,10,1)array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(0,9).reshape((3,3))array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])>>> np.linspace(0,10,11)array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])>>> np.random.rand(2,2)array([[ 0.11611405,  0.85913958],       [ 0.11487685,  0.96038192]])>>> np.random.randint(0,10,(3,3))array([[8, 3, 8],       [9, 5, 9],       [3, 1, 0]])

打印数组:

一维数组print为row,二维数组print为matrices,三维数组print为list of matrices

>>> print(np.arange(0,4))[0 1 2 3]>>> print(np.zeros((2,2)))[[ 0.  0.] [ 0.  0.]]>>> print(np.random.randint(0,10,(3,3)))[[4 3 2] [5 9 3] [1 5 4]]

二:对数组的基本操作

1.代数运算:+,-,×(这里是各对应元素相乘,不是矩阵乘法)

>>> a=np.arange(0,4).reshape((2,2))>>> aarray([[0, 1],       [2, 3]])>>> b=a*a>>> barray([[0, 1],       [4, 9]])>>> a+barray([[ 0,  2],       [ 6, 12]])>>> a-barray([[ 0,  0],       [-2, -6]])
2.矩阵乘法:np.dot(a,b)

>>> np.dot(a,b)array([[ 4,  9],       [12, 29]])
若参数为两个一维数组,则可看成是两个向量的点乘

>>> np.dot(np.array([1,2,3]),np.array([1,3,6]))25

注意:当两个类型不同的数组进行运算后,结果将是更一般的类型。

>>> c=np.arange(4)#np.arange()默认类型为np.int32>>> d=np.linspace(0,3,4)#np.linspace()默认类型为np.float64>>> c+darray([ 0.,  2.,  4.,  6.])>>> (c+d).dtypedtype('float64')


3.逻辑运算:<,>,==

>>> aarray([[0, 1],       [2, 3]])>>> barray([[0, 1],       [4, 9]])>>> a<barray([[False, False],       [ True,  True]], dtype=bool)>>> a==barray([[ True,  True],       [False, False]], dtype=bool)

4.ndarray class中有许多函数实现了对数组对一元运算。比如求数组中的最大值,最小值,所有元素之和等

>>> aarray([[0, 1],       [2, 3]])>>> a.sum()    #所有元素之和6>>> a.sum(axis=0)    #列相加array([2, 4])     >>> a.sum(axis=1)    #行相加array([1, 5])>>> a.max()#所有元素中对最大值3>>> a.max(axis=0)    #各列最大值array([2, 3])>>> a.max(axis=1)    #各行最大值array([1, 3])

5.Universal Functions(ufunc)
比如sqrt,sin,cos,exp,max,min,argmax,argmin,sum,trace等等
,这个参见另一篇博文,专门介绍numpy的universal function

三:索引(indexing),切片(slicing),迭代(iterating)
1.一维数组对索引,切片和迭代跟python中对list对操作一样。
>>> a=np.arange(10)>>> a[5]5>>> a[5:]array([5, 6, 7, 8, 9])>>> a[5:10:2]array([5, 7, 9])>>> for i in a[:3]:...     print(i)... 012

2.多维数组有多个axis,所以每一个axis需要一个索引。
>>> a=np.arange(6).reshape(2,3)>>> aarray([[0, 1, 2],       [3, 4, 5]])>>> a[1,1]4>>> a[:,:2]array([[0, 1],       [3, 4]])
>>> for row in a:...     print(row)... [0 1 2][3 4 5]

四.改变数组的形状(shape)
array.ravel(),array.reshape(a,b),a.T(),array.resize(a,b) (只有resize()会直接改变数组)
>>> aarray([[0, 1, 2],       [3, 4, 5]])>>> a.ravel()array([0, 1, 2, 3, 4, 5])>>> aarray([[0, 1, 2],       [3, 4, 5]])>>> a.reshape(3,2)array([[0, 1],       [2, 3],       [4, 5]])>>> a.Tarray([[0, 3],       [1, 4],       [2, 5]])>>> a.resize(3,2)>>> aarray([[0, 1],       [2, 3],       [4, 5]])

五:合并数组,分割数组
np.vstack(a,b):垂直方向合并; np.vsplit(a,n):垂直方向分割
np.hstack(a,b):水平方向合并;  np.hsplit(a,n):水平方向分割
>>> np.vstack((np.zeros((2,2)),np.ones((2,2))))array([[ 0.,  0.],       [ 0.,  0.],       [ 1.,  1.],       [ 1.,  1.]])>>> np.hstack((np.zeros((2,2)),np.ones((2,2))))array([[ 0.,  0.,  1.,  1.],       [ 0.,  0.,  1.,  1.]])
>>> a=np.arange(12).reshape(2,6)>>> aarray([[ 0,  1,  2,  3,  4,  5],       [ 6,  7,  8,  9, 10, 11]])>>> np.hsplit(a,2)[array([[0, 1, 2],       [6, 7, 8]]), array([[ 3,  4,  5],






0 0
原创粉丝点击