1. 程式人生 > >learn numpy & pandas 學習筆記1

learn numpy & pandas 學習筆記1

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屬性。