今天扣丁学堂Python培训老师给大家介绍一下关于Python中的Numpy矩阵操作及示例代码,首先通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包。
NumPy是一个非常优秀的提供矩阵操作的包。NumPy的主要目标,就是提供多维数组,从而实现矩阵操作,下面我们一起来看一下吧。

NumPy'smainobjectisthehomogeneousmultidimensionalarray.Itisatableofelements(usuallynumbers),allofthesametype,indexedbyatupleofpositiveintegers.InNumPydimensionsarecalledaxes.
基本操作
#######################################
#创建矩阵
#######################################
fromnumpyimportarrayasmatrix,arange
#创建矩阵
a=arange(15).reshape(3,5)
a
#Out[10]:
#array([[0.,0.,0.,0.,0.],
#[0.,0.,0.,0.,0.],
#[0.,0.,0.,0.,0.]])
b=matrix([2,2])
b
#Out[33]:array([2,2])
c=matrix([[1,2,3,4,5,6],[7,8,9,10,11,12]],dtype=int)
c
#Out[40]:
#array([[1,2,3,4,5,6],
#[7,8,9,10,11,12]])
#######################################
#创建特殊矩阵
#######################################
fromnumpyimportzeros,ones,empty
z=zeros((3,4))
z
#Out[43]:
#array([[0.,0.,0.,0.],
#[0.,0.,0.,0.],
#[0.,0.,0.,0.]])
o=ones((3,4))
o
#Out[46]:
#array([[1.,1.,1.,1.],
#[1.,1.,1.,1.],
#[1.,1.,1.,1.]])
e=empty((3,4))
e
#Out[47]:
#array([[0.,0.,0.,0.],
#[0.,0.,0.,0.],
#[0.,0.,0.,0.]])
#######################################
#矩阵数学运算
#######################################
fromnumpyimportarrayasmatrix,arange
a=arange(9).reshape(3,3)
a
#Out[10]:
#array([[0,1,2],
#[3,4,5],
#[6,7,8]])
b=arange(3)
b
#Out[14]:array([0,1,2])
a+b
#Out[12]:
#array([[0,2,4],
#[3,5,7],
#[6,8,10]])
a-b
#array([[0,0,0],
#[3,3,3],
#[6,6,6]])
a*b
#Out[11]:
#array([[0,1,4],
#[0,4,10],
#[0,7,16]])
a<5
#Out[12]:
#array([[True,True,True],
#[True,True,False],
#[False,False,False]])
a**2
#Out[13]:
#array([[0,1,4],
#[9,16,25],
#[36,49,64]],dtype=int32)
a+=3
a
#Out[17]:
#array([[3,4,5],
#[6,7,8],
#[9,10,11]])
#######################################
#矩阵内置操作
#######################################
fromnumpyimportarrayasmatrix,arange
a=arange(9).reshape(3,3)
a
#Out[10]:
#array([[0,1,2],
#[3,4,5],
#[6,7,8]])
a.max()
#Out[23]:8
a.min()
#Out[24]:0
a.sum()
#Out[25]:36
#######################################
#矩阵索引、拆分、遍历
#######################################
fromnumpyimportarrayasmatrix,arange
a=arange(25).reshape(5,5)
a
#Out[9]:
#array([[0,1,2,3,4],
#[5,6,7,8,9],
#[10,11,12,13,14],
#[15,16,17,18,19],
#[20,21,22,23,24]])
a[2,3]#取第3行第4列的元素
#Out[3]:13
a[0:3,3]#取第1到3行第4列的元素
#Out[4]:array([3,8,13])
a[:,2]#取所有第二列元素
#Out[7]:array([2,7,12,17,22])
a[0:3,:]#取第1到3行的所有列
#Out[8]:
#array([[0,1,2,3,4],
#[5,6,7,8,9],
#[10,11,12,13,14]])
a[-1]#取最后一行
#Out[10]:array([20,21,22,23,24])
forrowina:#逐行迭代
print(row)
#[01234]
#[56789]
#[1011121314]
#[1516171819]
#[2021222324]
forelementina.flat:#逐元素迭代,从左到右,从上到下
print(element)
#...#######################################
#改变矩阵
#######################################
fromnumpyimportarrayasmatrix,arange
b=arange(20).reshape(5,4)
b
#Out[18]:
#array([[0,1,2,3],
#[4,5,6,7],
#[8,9,10,11],
#[12,13,14,15],
#[16,17,18,19]])
b.ravel()
#Out[16]:
#array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
#17,18,19])
b.reshape(4,5)
#Out[17]:
#array([[0,1,2,3,4],
#[5,6,7,8,9],
#[10,11,12,13,14],
#[15,16,17,18,19]])
b.T#reshape方法不改变原矩阵的值,所以需要使用.T来获取改变后的值
#Out[19]:
#array([[0,4,8,12,16],
#[1,5,9,13,17],
#[2,6,10,14,18],
#[3,7,11,15,19]])
#######################################
#合并矩阵
#######################################
fromnumpyimportarrayasmatrix,newaxis
importnumpyasnp
d1=np.floor(10*np.random.random((2,2)))
d2=np.floor(10*np.random.random((2,2)))
d1
#Out[7]:
#array([[1.,0.],
#[9.,7.]])
d2
#Out[9]:
#array([[0.,0.],
#[8.,9.]])
np.vstack((d1,d2))#按列合并
#Out[10]:
#array([[1.,0.],
#[9.,7.],
#[0.,0.],
#[8.,9.]])
np.hstack((d1,d2))#按行合并
#Out[11]:
#array([[1.,0.,0.,0.],
#[9.,7.,8.,9.]])
np.column_stack((d1,d2))#按列合并
#Out[13]:
#array([[1.,0.,0.,0.],
#[9.,7.,8.,9.]])
c1=np.array([11,12])
c2=np.array([21,22])
np.column_stack((c1,c2))
#Out[14]:
#array([[11,21],
#[12,22]])
c1[:,newaxis]#添加一个“空”列
#Out[18]:
#array([[11],
#[12]])
np.hstack((c1,c2))
#Out[27]:array([11,12,21,22])
np.hstack((c1[:,newaxis],c2[:,newaxis]))
#Out[28]:
#array([[11,21],
#[12,22]])
网友评论