標籤:個數 轉換 rgs 資料 隨機 dom 4行 max str
import numpy''' -使用情境:建立向量和矩陣(numpy.ndarray) -注意:numpy的ndarray要求所有元素的類型必須一致 - 假如你輸入的list元素類型不一致,轉換為ndarry的時候,會自動轉型。 - 例如,某個元素是str,其他元素是int,那麼,所有元素都會被轉型為str'''from sklearn.utils.fixes import astypevector = numpy.array(['001','zhangsan','man',24])print(type(vector))print(vector.dtype)print(vector)print(vector.shape)# <class 'numpy.ndarray'># <U8# ['001' 'zhangsan' 'man' '24']# (4,)matrix = numpy.array([[1.0,777,999.]])print(type(matrix))print(matrix.dtype)print(matrix)print(matrix.shape)# <class 'numpy.ndarray'># float64# [[ 1. 777. 999.]]# (1, 3)matrix = numpy.array([['001','zhangsan','man','24'],['002','lisi','man','24']])print(type(matrix))print(matrix.dtype)print(matrix)print(matrix.shape)# <class 'numpy.ndarray'># <U8# [['001' 'zhangsan' 'man' '24']# ['002' 'lisi' 'man' '24']]# (2, 4)''' 矩陣操作:'''matrix = numpy.array([['00','01','02','03'], ['10','11','12','13'], ['20','21','22','23'], ['30','31','32','33']])print(matrix.shape,matrix.ndim,matrix.size) # 行列數shape,緯度數ndim,元素個數size# (4, 4) 2 16print(matrix[:,1]) #只取第2列# ['01' '11' '21' '31']print(matrix[1,:]) #只取第2行# ['10' '11' '12' '13']print(matrix[1,1]) #只取第2行第2列# 11print(matrix[1:3,:]) #只取第2、3行 (注意 1:3 不含右邊邊界 第4行)# [['10' '11' '12' '13']# ['20' '21' '22' '23']]print(matrix[:,1:3]) #只取第2、3列# [['01' '02']# ['11' '12']# ['21' '22']# ['31' '32']]print(matrix[1:,1:]) #只取第2行之後的行,第2列之後的列# [['11' '12' '13']# ['21' '22' '23']# ['31' '32' '33']]print(matrix.dtype) #ndarray的類型# <U2print(matrix.astype(float)) #ndarray的類型 轉換# [[ 0. 1. 2. 3.]# [ 10. 11. 12. 13.]# [ 20. 21. 22. 23.]# [ 30. 31. 32. 33.]]print(matrix.astype(float).dtype) #ndarray的類型 轉換之後# float64''' 矩陣初始化:'''print(numpy.zeros((2,3))) #快速編造全0矩陣 (常用於矩陣初始化)# [[ 0. 0. 0.]# [ 0. 0. 0.]]print(numpy.ones((2,3),dtype=numpy.int32)) #快速編造全1矩陣 (常用於矩陣初始化)# [[1 1 1]# [1 1 1]]print(numpy.eye(3)) #單位方陣# [[ 1. 0. 0.]# [ 0. 1. 0.]# [ 0. 0. 1.]]print(numpy.eye(2,3)) #單位矩陣# [[ 1. 0. 0.]# [ 0. 1. 0.]]print(numpy.arange(12)) #快速編造數列# [0 1 2 3 4 5 6 7 8 9 10 11]print(numpy.arange(12).reshape(3,4)) #重新排列矩陣# [[ 0 1 2 3]# [ 4 5 6 7]# [ 8 9 10 11]]print(numpy.arange(1,22,3)) #快速編造數列 起始值1 依次加3 直至小於22# [ 1 4 7 10 13 16 19]print(numpy.random.random((2))) #隨機向量 0至1之間# [ 0.77478872 0.36609742]print(numpy.random.random((2,3))) #隨機矩陣 0至1之間# [[ 0.72243154 0.33383428 0.11111886]# [ 0.85122432 0.68508064 0.51619949]]print(numpy.linspace(0, 2, 10)) #在0至2之間,取10個數,平均的# [ 0. 0.22222222 0.44444444 0.66666667 0.88888889 1.11111111 1.33333333 1.55555556 1.77777778 2. ]''' 矩陣運算:'''matrixA = numpy.array([[1,2,3], [4,5,6], [7,8,9]])matrixB = numpy.array([[-1,-2,-3], [-4,-5,-6], [-7,-8,-9]])print(matrixA + matrixB) #矩陣相加# [[0 0 0]# [0 0 0]# [0 0 0]]print(matrixA * 2) #矩陣數乘# [[ 2 4 6]# [ 8 10 12]# [14 16 18]]print(matrixA * matrixB) #矩陣對應元素相乘(姑且叫做點乘),新矩陣的元素,是原來兩個矩陣的對應元素相乘# [[ -1 -4 -9]# [-16 -25 -36]# [-49 -64 -81]]print(matrixA.dot(matrixB)) #矩陣相乘 行列相乘 或者 numpy.dot(matrixA,matrixB)# [[ -30 -36 -42]# [ -66 -81 -96]# [-102 -126 -150]]print(matrixA.T) #轉置# [[1 4 7]# [2 5 8]# [3 6 9]]print(numpy.vstack((matrixA,matrixB))) #行拼接# [[ 1 2 3]# [ 4 5 6]# [ 7 8 9]# [-1 -2 -3]# [-4 -5 -6]# [-7 -8 -9]]print(numpy.hstack((matrixA,matrixB))) #列拼接# [[ 1 2 3 -1 -2 -3]# [ 4 5 6 -4 -5 -6]# [ 7 8 9 -7 -8 -9]]print(numpy.vsplit(matrixA,3)) #行切分# [array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]print(numpy.vsplit(matrixA,(0,1))) #行切分 在第0列切一刀 在第1列切一刀,愛切幾刀就幾刀# [array([], shape=(0, 3), dtype=int32), # array([[1, 2, 3]]), # array([[4, 5, 6],# [7, 8, 9]])]print(numpy.hsplit(matrixA,3)) #列切分# [array([[1],# [4],# [7]]), # array([[2],# [5],# [8]]), # array([[3],# [6],# [9]])]matrixC = matrixA.view() #淺層複製,視圖,其實matrixA和matrixC都是共用同一份資料,不推薦使用viewmatrixC = matrixA.copy() #深層複製,整整的資料拷貝,matrixA和matrixC是兩份資料,互不干擾print(matrixC)# [[1 2 3]# [4 5 6]# [7 8 9]]matrixC = numpy.tile(matrixA,(2,3)) #複製,深層的,把矩陣按行按列各複製幾次print(matrixC)# [[1 2 3 1 2 3 1 2 3]# [4 5 6 4 5 6 4 5 6]# [7 8 9 7 8 9 7 8 9]# [1 2 3 1 2 3 1 2 3]# [4 5 6 4 5 6 4 5 6]# [7 8 9 7 8 9 7 8 9]]matrixD = numpy.array([[1,-2,-3], [4,-5,-6], [7,-8,-9]])print(matrixD.argmax(axis=1)) #按行尋找,最大元素在該行中的索引# [0 0 0]print(matrixD.argmax(axis=0)) #按列尋找,最大元素在該行中的索引# [2 0 0]matrixE = numpy.array([[1,-2,-3], [9,3,4], [7,-8,-9]])print(numpy.sort(matrixE, axis=1)) #排序,按行,升序# [[-3 -2 1]# [ 3 4 9]# [-9 -8 7]]print(numpy.argsort(matrixE, axis=1)) #排序,按行,升序,返回座標矩陣# [[2 1 0]# [1 2 0]# [2 1 0]]print(numpy.sort(matrixE, axis=0)) #排序,按列,升序# [[ 1 -8 -9]# [ 7 -2 -3]# [ 9 3 4]]print(numpy.argsort(matrixE, axis=0)) #排序,按列,升序,返回座標矩陣# [[0 2 2]# [2 0 0]# [1 1 1]]
python練手,numpy