Numpy學習總結與梳理 ---- 參考兩門課程《莫煩Python》《日月光華Python》【Numpy回顧總結】

參考課程:《莫煩Python》《日月光華Python》.

說明:該文章用於回顧、梳理,未附加足夠的代碼解釋,素所以不適合開始入門學習。

1 Numpy的數據結構&數據類型

  1. Numpy的數據結構:僅一種:np.array
  2. Numpy的數據類型:詳情見文 Numpy數據類型
  3. 數據類型的查看與轉換:對象.dtype()與對象.astype()

瑣碎知識點:

  1. Bool類型數據的隱式轉換 True爲 1 & False爲 0 。bool與其他數據類型隱式轉換的詳細說明
  2. 對象.round()函數並不是真正的四捨五入。round函數並不是絕對的四捨五入.

2 數組對象的創建方式&屬性方法調用規則

  1. Numpy的數組創建方式:np.array( list | tuple ,dtype=”指定的數據類型“) 默認浮點數類型
    zeros(元組形式的shape)----zeros((3,4))
    empty(元組形式的shape)----有時生成0值,有時生成各種隨機數。
    arange(起始數字,結束數字(不可取),步幅)----返回一維數組,常搭配reshape
    random.randn(元組形式的shape)----標準正態分佈隨機值。
    ones() ---- 同zeros
    linspace(起始數字,結束數字(可取),段數) ---- 將數據範圍平均分成幾段
  2. array數組對象查看屬性的方法:ndim(秩、維度)、shape、dtype、size(所有元素的個數)
  3. array數組對象的方法調用規則:由數組對象點出相應方法,或者np點出相應方法。區別於python中自帶的同名方法。
    比如:array對象.sum()可行,而sum(array對象)報錯
    以後還會需要pandas對象,所以保險的調用方式是:對象.方法()。
    另外,還有一個原因,有的時候,一個方法僅支持對象點出方法的形式而不支持np點出的形式;同時,有的方法僅支持np點出的方式而不支持對象點出(比如split)。
  4. 注意:(3,)和(3,1)不是同一shape的數組,前者是一維,後者是二維。
  5. 習慣上,對於二維數組,經常把第一維度稱爲行,第二維度稱爲列。

3 數組對象的基礎運算&常用方法介紹

  1. 兩個相同shape的數組對象的運算,如果是加減乘除,則是兩個數組的對應位置元素的加減乘除,且shape保持不變。
  2. 兩個不相同shape的數組且其中一個與另一個數組的某個維度值相同的對象運算,如果是加減乘除,則會使用廣播處理操作。參考文章numpy中的廣播機制.
  3. 如果是點乘(np.dot)則是線代中典型的矩陣相乘運算,且shape不會一成不變。
  4. 條件判斷表達式,會返回一個bool的數組 ---- 常用來索引滿足條件的元素 或者sum等方法統計滿足條件的元素個數
  5. 除法取模( % | mod )& 取餘操作(//)
  6. np.[sin | sum|min|max|mean| average|median | describe ]
  7. np.[argmin|argmax] ---- 獲取最值得索引。
  8. np.[cumsum | cumprod ] ---- 累加 | 累乘 可以指定軸
  9. np.diff ---- 相鄰元素的差值,如果是二維的數組在計算的軸方向上會減少一行或者一列。
  10. np.nonzero ---- 如果是二維數組,將數組對象中非0的元素的索引分別以行索引和列索引的方式返回。
  11. np.sort ---- 數據對象將按照指定的計算軸的方向進行排序,且默認升序排列,而ascending=False表示降序。
  12. np.argsort() ---- 以數組形式反映出從小到大排列的元素在原來序列中的索引值[1,4,3,6] --> [0, 2, 1, 3]
  13. np.[transpose | T ] ---- 矩陣的轉置,常用於矩陣的乘法。
  14. np.clip(數組對象,最小臨界數字,最大臨界數字) ---- 將數字類型的數組對象中大於”最大臨界數字“的數字全部重新賦值爲”最大臨界數字”,而小於不等於“最小臨界數字”的數字全部重新賦值爲“最小臨界數字”。
  15. np.newaxis ---- 用以升一個維度。
  16. np.unique ---- 以列表的形式,返回一個列表對象中不相同的元素值。
  17. np.[all | any] ---- all 表示全部元素均爲True才返回True,而any 表示只存在一個True時就可以返回True。
  18. “沿某一維度進行計算的方法”的通用參數:axis。且對於二維對象,axis取0還是1,記住這麼一句話”0垂直方向,1水平方向“。
  19. 不能使用np點出的方法:對象.flat(返回一個生成器)& 數組對象.[flatten | ravel](返回一個含有具體元素的列表)。

瑣碎知識點:

  1. 所有的方法,基本上都不會對原數據對象進行修改,以保障數據安全與避免"爆內存"。如果要直接修改原數據,需要添加inplace=True參數。
  2. newaxis升維的理解 numpy添加新的維度:newaxis的方法經常遇到的問題是:比如需要從二維數組裏面抽取一列,取出來之後維度卻變成了一維,假如我們需要將其還原爲二維,就需要上面的方法了。
  3. axis的另一種使用理解 如何快速理解numpy中的axis:例如一個shape(3,2,4)的數組,代表一個三維數組,這時如果 :
    axis = 0時,就相當於所求的數組的結果變成shape(2,4)
    axis = 1時,數組的結果shape(3,4)
    axis = 2時,數組的結果shape(3,2)

4 Numpy選擇指定數據的方式:索引&切片

  1. 單值索引 ---- 對象[單個索引值]。
  2. 多指索引 ---- 對象 [ 行索引值 ] [ 列索引值 ] & 對象[行索引值,列索引值]。
  3. 切片索引 ---- 對象[行索引值1:行索引值2:步幅**,**列索引值1:列索引值2:步幅] & 對象[行索引值1:行索引值2:步幅]
  4. bool式條件索引 ---- 對象[條件1&條件2…] 這種方式使用頻率還是非常高的,且常搭配 ~ ,即對象[~(條件1&條件2…)] ,以實現取反!

瑣碎知識點:

  1. 切片[索引值1:索引值2:步幅] 的正負索引值與正負步幅的理解。切片中正負索引值和正負步幅的理解.
  2. bool式條件索引。Numpy中bool式條件索引

5 Numpy數組的合併:垂直合併&水平合併

  1. np.vstack([ 數組對象1,數組對象2 ]) ---- 垂直合併,hstack ---- 左右合併。
  2. np.concatenate([數組對象列表],axis) ---- 在指定的軸方向上進行數據連接,且注意涉及到指定軸方向的方法計算,最好先測試一下計算效果。

6 Numpy數組的分割:均等分割&非均等分割

  1. np.split(數組對象,分割份數,指定軸方向)
  2. np.array_split(數組對象,分割份數,指定軸方向)
  3. np.vsplit(數組對象,分割份數) ---- 垂直方向;np.hsplit(數組對象,分割份數) ---- 水平方向。

7 Numpy的淺拷貝和深度拷貝

  1. 平時的賦值操作都是淺拷貝;深拷貝需要在賦值操作的基礎上添加copy方法。即a1 = a2.copy()
  2. 判斷兩個變量的引用對象是否一致(即淺拷貝)的方式:通過is來判斷兩個變量的ID,a1 is a2

8 Numpy的隨機數

  1. np.random.normal() ---- 默認情況下返回一個標準正態分佈的隨機值。
  2. np.random.randn((3,4)) ---- 在指定shape的情況下,返回一個標準正態分佈的隨機值。
  3. np.random.randint(1,10,(3,4)) ---- 返回一個shape爲(3,4)的元素值在[ 1,10) 左閉右開區間的隨機值。
  4. np.random.choice(list) ---- 返回list序列中其中的任意一個元素。
  5. np.random.permutation(list) ---- 將list中的元素的位置順序隨機打亂,常見的用法是對於二維數組含多列的數據集,先將樣本的索引順序打亂,以實現對樣本順序的打亂。index = np.random.permutation(len(a)) --> a[index] .
  6. np.random.seed(12) ----> 產生原因是爲了重複某項實驗,而其一旦被調用,它的影響效力僅僅限於下面的第一個出現的random語句。

瑣碎知識點:

  1. np.random.normal的使用 np.random.normal()函數的默認值的推演.
  2. np.random.seed()的理解與使用 np.random.seed()的理解及使用.
  3. np.where語句的理解與使用numpy.where() 用法詳解.

9 Numpy的邏輯運算

  1. 僅將where(Bool序列,序列1,序列2)---- 三個序列的長度必須一致,另外,如果對應位置的bool值是True則選擇序列1中的相應元素,如果是False,則選擇序列2中的相應元素。

10 Numpy的數據存取

  1. 默認的擴展名是,npy
  2. np.save(“file_name”, variable_name) ---- 保存某個Numpy變量,且file_name不需要提供擴展名。
  3. np.load(“file_name.npy”) ---- 加載npy文件。、
a = np.arange(6)
np.save("lesson10",a) 
b = np.load("lesson10.npy")
b

#############    輸出內容  #################
array([0, 1, 2, 3, 4, 5])

==================== T H E E N D! ====================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章