生成矩阵:
>>> 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]]