#-*- encoding:utf-8 -*- import numpy import io from io import StringIO #import io.StringIO def createArray(): d = numpy.zeros((3,4)) print(d.dtype) print(d.dtype.itemsize) oneMatrix = numpy.ones((3,3)) print(oneMatrix ,int) emptyMatrix = numpy.empty((2,3)) print(emptyMatrix) #注意最后一个取不到 myArange = numpy.arange(10,30,5) print(myArange) #arange默认为连续数组 arange2 = numpy.arange(7 , dtype=int) print(arange2) def toType(): x = numpy.float32(1.0) print(x) y = numpy.int_([1,2,3]) print(y) z = numpy.arange(3,dtype=numpy.uint8) print(z) #转换数组元素的类型 z = z.astype(float) print(z) print(z.dtype) #查看矩阵类型 d = numpy.dtype(int) print(d) #判断矩阵类型是否是指定类型 flag = numpy.issubdtype(d,int) print(flag) #将python数组转换为numpy数组 def toNumpyArray(): #默认是双精度浮点数float64 x = numpy.array([2,3,1,0]) print(x) arr = numpy.arange(2,10,dtype=numpy.float) print(arr) arr2 = numpy.arange(2,3,0.1) print(arr2) #linspace(beg,end,num),间隔=(end-beg)/(num-1) arr3 = numpy.linspace(1,4,6) print(arr3) ind = numpy.indices((3,3)) print(ind) #读取字符串,生成矩阵 data = "1, 2, 3\n4, 5, 6" #注意:需要的是字符流,需要编码为utf-8的字符流,解码为字符串(更高级) arr4 = numpy.genfromtxt(io.BytesIO(data.encode("utf-8")) ,delimiter=',',dtype='f8' ) #arr4 = numpy.genfromtxt(data ,delimiter=',' ) print(arr4) def shape_test(): #shape():作用:读取矩阵的长度,输入参数为矩阵 res = numpy.shape([1]) print(res) res2 = numpy.shape([ [1],[2] ]) print(res2) def create_unitMatrix(): #创建单位矩阵 e = numpy.eye(3) print(e) print("单位矩阵的形状:") print(e.shape) #转置矩阵 def transportMatrix(): x = numpy.linspace(0,4,5) print("转置前") print(x) print(x.shape) x.shape=(5,1) y = numpy.transpose(x) print("转置后") print(y) #transpose的操作依赖于shape参数,对于一维的shape.转置不起作用,[,,]表示行矩阵,[ [,,] ]表示列矩阵 ''' matrix必须是2维,但是numpy arrays可以是多维的 ''' def matrixCompute(): a = numpy.matrix( [ [1,2,3], [4,5,6], [7,8,9] ] ) m = numpy.ones((3,1),int) res = a * m print("验证矩阵乘法结果") print(res) #矩阵加减法 print("矩阵加法结果") e = a + a print(e) print("矩阵减法结果") e = a - a print(e) #矩阵乘法 print("矩阵乘法结果") b = a * a print(b) print("dot点乘结果") d = numpy.dot(a,a) print(d) print("转置矩阵函数") g = a.transpose() print(g) print("转置矩阵T") g = a.T print(g) print("逆矩阵**") f = a**(-1) print(f) print("逆矩阵I") f = a.I print(f) #行列式 j = numpy.linalg.det(a) print("行列式") print(j) #矩阵乘法 def matrixMultiply_test(): # 矩阵中 * 是数组对应元素项城 , dot才是真正的矩阵乘法,我们应该用dot a = numpy.array( [ [1,2],[1,1] ] ) b = numpy.array( [ [1,2],[1,1] ] ) c = a * b print("矩阵对应元素相乘") print(c) d = numpy.dot(a,b) print("矩阵真实乘法") print(d) e = numpy.eye(3) print("单位矩阵") print(e) print("常数乘以单位矩阵") print(3*e) ''' 数组按行求和,按列求和 ''' def matrix_sum(): #axis = 0表示按列求和,axis=1按行求和 c = numpy.array( [ [0,1],[0,1] ] ) a = numpy.sum( [ [0,1],[0,1] ] , axis = 0) print(a) b = numpy.sum( [ [0,1],[0,1] ] , axis = 1) print(b) d = c.sum(axis = 0) print(d) e = c.sum(axis = 1) print(e) def generateWeightMatrix(Matrix): M = len(Matrix[0]) if M == 0: return False resultArr = numpy.ones((1, M)) for row in Matrix: rowVal = row.sum() newRow = [] if rowVal != 0: newRow = (1.0/rowVal) * row else: newRow = row resultArr = numpy.insert(resultArr , len(resultArr) , values=numpy.array(newRow) , axis=0) #删除第一行 resultArr = numpy.delete(resultArr , 0 , 0) return resultArr ''' 矩阵遍历 ''' def matrix_visit(): #e = numpy.eye(3) e = numpy.array( [ [1,0,1],[0,1,0],[0,0,0] ] ) M = len(e[0]) rowVecror = e.sum(axis = 1) #print(rowVecror) #print(e) resultArr = numpy.ones((1, M)) #resultArr = numpy.array([]) #resultArr = numpy.array([]) newArr = [] print("求权值前") for row in e: print(row) rowVal = row.sum() newRow = [] if rowVal != 0: newRow = (1.0/rowVal) * row #print(newRow) else: newRow = row #print(newRow) resultArr = numpy.insert(resultArr , len(resultArr) , values=numpy.array(newRow) , axis=0) #resultArr = newArr print("求权值后") #需要删除一行 numpy.delete(arr,obj,axis=None) resultArr = numpy.delete(resultArr , 0 , 0) print(resultArr) #遍历数组每个元素,用flat ''' for ele in e.flat: print(ele) ''' ''' 修改矩阵,添加一行或一列 ''' def modifyMatrix(): e = numpy.ones((2,2)) print(e) a = numpy.array([1,1]) #a = numpy.ones(2) print(a) b = numpy.array([3,3]) #e.c_[a] ''' numpy.insert(arr,obj,values,axis=None) arr:输入数组 ''' #注意insert是返回一个新的数组,axis=0是添加行 newe = numpy.insert(e , 0 , values=b , axis=0 , ) print("添加一行后的结果") print(newe) arr = [] emptyArr = numpy.array([]) newe = numpy.insert(emptyArr , 0 , values = b , axis=0) print(newe) def flat_test(): R = numpy.array([1,2,3]) for x in R.flat: print(x) val = str(x) print(val) results = [ str(round(x,5)) for x in R.flat] results = "\t".join(results) print(results) #results = [ str(round(x) ,5 )) for x in R.flat ] if __name__ == "__main__": #createArray() #toType() #toNumpyArray() ''' shape_test() create_unitMatrix() transportMatrix() ''' #matrixCompute() #matrixMultiply_test() #matrix_sum() #matrix_visit() #modifyMatrix() flat_test() Matrix = numpy.array( [ [1,0,1],[0,1,0],[0,0,0] ] ) resultMatrix = generateWeightMatrix(Matrix) print(resultMatrix)