learn numpy & pandas 學習筆記1
阿新 • • 發佈:2018-12-15
import numpy as np
array = np.array([[1,2,3],[2,3,4]]) #列表轉化為矩陣
print(array)
print('number of dim:',array.ndim) # 維度
print('shape :',array.shape) # 行數和列數
print('size:',array.size) # 元素個數
import numpy as np # array:建立陣列 # dtype:指定資料型別 # zeros:建立資料全為0 # ones:建立資料全為1 # empty:建立資料接近0 # arrange:按指定範圍建立資料 # linspace:建立線段 # a = np.array([2,23,4]) # list 1d # print(a) # a = np.array([2,23,4],dtype=np.int) # # a = np.array([2,23,4],dtype=np.int16) # # a = np.array([2,23,4],dtype=np.int32) # # a = np.array([2,23,4],dtype=np.int64) # print(a.dtype) # a = np.array([2,23,4],dtype=np.float) # # a = np.array([2,23,4],dtype=np.float32) # # a = np.array([2,23,4],dtype=np.float64) # print(a.dtype) # a = np.array([[2,23,4],[2,32,4]]) # 2d 矩陣 2行3列 # print(a) # a = np.zeros((3,4)) # 資料全為0,3行4列 # print(a) # a = np.ones((3,4),dtype = np.int) # 資料為1,3行4列 # print(a) # a = np.empty((3,4)) # 資料為empty,3行4列 # #建立全空陣列, 其實每個值都是接近於零的數: # print(a) # a = np.arange(10,20,2) # 10-19 的資料,2步長 # print(a) # a = np.arange(12).reshape((3,4)) # 3行4列,0到11 # print(a) # #用 linspace 建立線段型資料: # a = np.linspace(1,10,20) # 開始端1,結束端10,且分割成20個數據,生成線段 # print(a) a = np.linspace(1,10,20).reshape((5,4)) # 更改shape print(a)
import numpy as np # a=np.array([10,20,30,40]) # array([10, 20, 30, 40]) # b=np.arange(4) # array([0, 1, 2, 3]) # c=a-b # array([10, 19, 28, 37]) # c=a+b # array([10, 21, 32, 43]) # c=a*b # array([ 0, 20, 60, 120]) #對應位置的數字相乘,不是真正的矩陣乘法 # c=b**2 # array([0, 1, 4, 9]) 求各位置數字的平方,同理可求n次方 # c=10*np.sin(a) # # array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ]) # print(b<3) # # array([ True, True, True, False], dtype=bool) 判斷b中各元素與3的大小 # a=np.array([[1,1],[0,1]]) # b=np.arange(4).reshape((2,2)) # print(a) # # array([[1, 1], # # [0, 1]]) # print(b) # # array([[0, 1], # # [2, 3]]) # c_dot = np.dot(a,b) #這是真正的矩陣乘法 # # array([[2, 4], # # [2, 3]]) # c_dot_2 = a.dot(b) #這是矩陣乘法的另一種表示 # # array([[2, 4], # # [2, 3]]) a=np.random.random((2,4)) # print(a) # array([[ 0.94692159, 0.20821798, 0.35339414, 0.2805278 ], # [ 0.04836775, 0.04023552, 0.44091941, 0.21665268]]) # np.sum(a) # 4.4043622002745959 對a中各個位置求和 # np.min(a) # 0.23651223533671784 對a中各個位置求min # np.max(a) # 0.90438450240606416 對a中各個位置求max #如果你需要對行或者列進行查詢運算,就需要在上述程式碼中為 axis 進行賦值。 #當axis的值為0的時候,將會以列作為查詢單元, 當axis的值為1的時候,將會以行作為查詢單元。 print("a =",a) # a = [[ 0.23651224 0.41900661 0.84869417 0.46456022] # [ 0.60771087 0.9043845 0.36603285 0.55746074]] print("sum =",np.sum(a,axis=1)) #對每行求和 # sum = [ 1.96877324 2.43558896] print("min =",np.min(a,axis=0)) #對每列求min # min = [ 0.23651224 0.41900661 0.36603285 0.46456022] print("max =",np.max(a,axis=1)) #對每行求max # max = [ 0.84869417 0.9043845 ]
import numpy as np A = np.arange(2,14).reshape((3,4)) # array([[ 2, 3, 4, 5] # [ 6, 7, 8, 9] # [10,11,12,13]]) # print(np.argmin(A)) # 0 求A中最小值的位置引數,即第0個數字 # print(np.argmax(A)) # 11 求A中最大值的位置引數,即第11個數字 # print(np.mean(A)) # 7.5 求A中所有元素的均值 # print(np.average(A)) # 7.5 # print(A.mean()) # 7.5 這三種方式的作用是一樣的 # print(A.median()) # 7.5 同樣的,我們可以寫出求解中位數的函式 # # 顯示錯誤:AttributeError: 'numpy.ndarray' object has no attribute 'median' # # 通過dir(A)檢視,A 還真沒有median這個屬性,但是視訊裡可以執行,可能是版本問題 # from numpy import * # print(median(A)) #可以這樣實現 # print(np.cumsum(A)) # #累加函式。在cumsum()函式中:生成的每一項矩陣元素均是從原矩陣首項累加到對應項的元素之和。 # # [2 5 9 14 20 27 35 44 54 65 77 90] # #相應的有累差運算函式:該函式計算的便是每一行中後一項與前一項之差。 # #故一個3行4列矩陣通過函式計算得到的矩陣便是3行3列的矩陣。 # print(np.diff(A)) # # [[1 1 1] # # [1 1 1] # # [1 1 1]] # print(np.nonzero(A)) #求A中非0元素的位置 # #這個函式將所有非零元素的行與列座標分割開,重構成兩個分別關於行和列的矩陣。 # # (array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3])) # #上面結果中,第一個array是行座標(如第一個數字是0),第二個array是列座標(如第一個數字是0) # #這就表示A中位置第0行第0列的元素是nonzero # #同樣的,我們可以對所有元素進行仿照列表一樣的排序操作 # A = np.arange(14,2, -1).reshape((3,4)) # # array([[14, 13, 12, 11], # # [10, 9, 8, 7], # # [ 6, 5, 4, 3]]) # print(np.sort(A)) #但這裡的排序函式仍然僅針對每一行進行從小到大排序操作: # # array([[11,12,13,14] # # [ 7, 8, 9,10] # # [ 3, 4, 5, 6]]) # print(msort(A)) #在列方向上排序 # # [[ 6 5 4 3] # # [10 9 8 7] # # [14 13 12 11]] A = np.arange(14,2, -1).reshape((3,4)) # array([[14, 13, 12, 11], # [10, 9, 8, 7], # [ 6, 5, 4, 3]]) # print(np.transpose(A)) #矩陣的轉置有兩種表示方法: # print(A.T) # # array([[14,10, 6] # # [13, 9, 5] # # [12, 8, 4] # # [11, 7, 3]]) # # array([[14,10, 6] # # [13, 9, 5] # # [12, 8, 4] # # [11, 7, 3]]) print(np.clip(A,5,9)) #將A中元素進行替換,小於5的都換成5,大於9的都換成9 ,只保留5到9之間的原始資料 # array([[ 9, 9, 9, 9] # [ 9, 9, 8, 7] # [ 6, 5, 5, 5]])
import numpy as np
# A = np.arange(3,15)
# # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
# print(A[3]) # 6
# A = np.arange(3,15).reshape((3,4))
# """
# array([[ 3, 4, 5, 6]
# [ 7, 8, 9, 10]
# [11, 12, 13, 14]])
# """
# print(A[2]) #實際上這時的A[2]對應的就是矩陣A中第三行(從0開始算第一行)的所有元素。
# # [11 12 13 14]
# print(A[1][1]) # 8
# print(A[1, 1]) # 8
# print(A[1, 1:3]) # [8 9] 這一表示形式即針對第二行中第2到第4列元素進行切片輸出(不包含第4列)
# for row in A: #此時它會逐行進行列印操作。如果想進行逐列列印,就需要稍稍變化一下:
# print(row)
# """
# [ 3, 4, 5, 6]
# [ 7, 8, 9, 10]
# [11, 12, 13, 14]
# """
# print(A.T)
# for column in A.T: # 對A進行轉置,再將得到的矩陣逐行輸出即可得到原矩陣的逐列輸出
# print(column)
# """
# [ 3, 7, 11]
# [ 4, 8, 12]
# [ 5, 9, 13]
# [ 6, 10, 14]
# """
# A = np.arange(3,15).reshape((3,4))
# print(A.flatten()) # 不可以 print(A.flat()) ,它是個迭代器,不可列印
# # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
# for item in A.flat:
# print(item)
# #這一指令碼中的flatten是一個展開性質的函式,將多維的矩陣進行展開成1行的數列。而flat是一個迭代器,本身是一個object屬性。