矩阵操作

生成矩阵:

>>> from numpy import *
>>> data1 = mat( zeros(3, 3) )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: data type not understood
>>> data1 = mat( zeros( (3,3) ) )
>>> data1
matrix([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]])
>>> data2 = mat( ones( (2,4) ) )
>>> data2
matrix([[ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]])
>>> data3 = mat( random.rand(2,2) )  #创建2*2随机数矩阵,随机数在0-1之间
>>> data3
matrix([[ 0.04367498,  0.29091344],
        [ 0.49962816,  0.7018674 ]])

>>> data4 = mat( random.randint(10, size=(3,3)) ) #创建3*3随机整数矩阵,必须规整整数范围,下限在前,上限在后,下限不写默认为0
>>> data4
matrix([[3, 1, 7],
        [7, 5, 1],
        [9, 9, 7]])

>>> data4 = mat( random.randint(1, 10, size=(3,3)) )
>>> data4
matrix([[8, 9, 6],
        [8, 7, 4],
        [7, 3, 9]])
>>> data4 = mat( random.randint(10,1, size=(3,3)) )
ValueError: low >= high      #下限上限位置不能反
>>> data6 = mat( eye(2,2) )
>>> data6
matrix([[ 1.,  0.],
        [ 0.,  1.]])
>>> data6 = mat( eye(2,2,dtype=int) )
>>> data6
matrix([[1, 0],
        [0, 1]])
>>> a1 = [1,2,3]
>>> a2 = diag(a1)
>>> a2
array([[1, 0, 0],
       [0, 2, 0],
       [0, 0, 3]])
>>> a3 = mat( diag(a1) )
>>> a3
matrix([[1, 0, 0],
        [0, 2, 0],
        [0, 0, 3]])

矩阵运算:

>>> from numpy import *
>>> a1 = mat( [1,2] )
>>> a2 = mat( [ [1],[2] ] )
>>> a3 = a1 * a2
>>> a3
matrix([[5]])     #矩阵相乘之后即使得到一个数,性质还是矩阵
>>> a1 = mat( [1,1] )
>>> a2 = mat( [2,2] )
>>> a3 = a1 .* a2  #同规模矩阵点乘不能用.*
SyntaxError: invalid syntax
>>> a3 = a1 * a2   #同规模矩阵点乘不能直接用*
ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
>>> a3 = multiply(a1, a2)  ##同规模矩阵点乘用multiply()
>>> a3
matrix([[2, 2]])
>>> a1 = mat( [2,2] )
>>> a2 = a1 * 2
>>> a2
matrix([[4, 4]])
>>> a1 = mat( eye(2,2)*0.5 )
>>> a1
matrix([[ 0.5,  0. ],
        [ 0. ,  0.5]])
>>> a2 = a1.I    #矩阵求逆
>>> a2
matrix([[ 2.,  0.],
        [ 0.,  2.]])
>>> a1 = mat( [ [1,2], [3,4] ] )
>>> a1.T      #矩阵求转置
matrix([[1, 3],
        [2, 4]])

>>> a1 = array( [ [1,1], [2,3], [4,2] ] )
>>> a1
array([[1, 1],
       [2, 3],
       [4, 2]])
>>> a1.sum(axis=0)   #或者写成sum(a1,axis=0)
array([7, 6])
>>> a1.sum(axis=1)
array([2, 5, 6]) 
>>> a1 = mat( [ [1,1], [2,3], [4,2] ] )
>>> a1
matrix([[1, 1],
        [2, 3],
        [4, 2]])
>>> a1.sum(axis=0)
matrix([[7, 6]])
>>> a1.sum(axis=1)    #与array相比计算每行的和之后是一个3*1的矩阵
matrix([[2],
        [5],
        [6]])
>>> a2 = sum( a1[1,:] )   #求第一行的和,结果不是矩阵,而是一个数
>>> a2
5

计算最大最小和索引:

>>> from numpy import *
>>> a1 = mat( [ [1,2], [3,4] ] )
>>> a1.max()    #矩阵所有元素最大值,结果是一个数
4
>>> a2 = amax( a1[:, 1] )   #python3中尽量用amax,只要是单个数,返回的都是数,不是矩阵
>>> a2
4
>>> a3 = amax( a1[0,:] ) 
>>> a3
2
>>> a1[0,:].max()    #用.max()形式返回的是数
2
>>> amax(a1,0)    #求a1每列最大值
matrix([[3, 4]])
>>> amax(a1,axis=1)  #求a1每行最大值
matrix([[2],
        [4]])
>>> argmax( a1, axis=0 )   #求每列最大值在该列的索引(位置序号)
matrix([[1, 1]], dtype=int64)
>>> argmax( a1, axis=1 )   ##求每行最大值在该列的索引(位置序号)
matrix([[1],
        [1]], dtype=int64)

矩阵的分隔和合并:

>>> from numpy import *
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
>>> b = a[1:, 1:]    #分割
>>> b
matrix([[5, 6],
        [8, 9]])
>>> c = a[0:1, 0:1]   #取不到第二行和第二列
>>> c
matrix([[1]])

>>> a1 = mat( [ [1,1],[2,2] ] )
>>> a2 = mat( [ [3,3],[4,4] ] )
>>> c = vstack( (a1,a2) )     #合并
>>> c
matrix([[1, 1],
        [2, 2],
        [3, 3],
        [4, 4]])
>>> d = hstack( (a1,a2) )
>>> d
matrix([[1, 1, 3, 3],
        [2, 2, 4, 4]])

矩阵(matrix),数组(array),列表(list)的转换

>>> from numpy import *
>>> a1 = [ [1,2], [3,4], [5,6] ]

>>> a2 = array(a1)   #列表转换成数组
>>> a2
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> a3 = mat(a1)    #列表转换成矩阵
>>> a3
matrix([[1, 2],
        [3, 4],
        [5, 6]])
>>> a4 = array(a3)   #矩阵转换成数组
>>> a4
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> a3.tolist()      #矩阵转换成列表   不可以写成tolist(a3)
[[1, 2], [3, 4], [5, 6]]
>>> a2.tolist()      #数组转换成列表
[[1, 2], [3, 4], [5, 6]]
>>> a1 =[1,2,3]   
>>> a2 = array(a1)
>>> a2
array([1, 2, 3])
>>> a3 = mat(a1)
>>> a3
matrix([[1, 2, 3]])    #a1列表转成矩阵时会有小改变,即加上了一个可以省略(只有一行)的行[]
>>> a2.tolist() 
[1, 2, 3]
>>> a3.tolist()        #由矩阵转成列表时会多出一个本来可以省略的[]  
[[1, 2, 3]]



猜你喜欢

转载自blog.csdn.net/xiaobaicai4552/article/details/79404729