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