1. 程式人生 > >教程|使用陣列進行陣列程式設計(上)

教程|使用陣列進行陣列程式設計(上)

教程|使用陣列進行陣列程式設計(上)

 

教程|使用陣列進行陣列程式設計(上)

 

訪問flyai.club,一鍵建立你的人工智慧專案

教程|使用陣列進行陣列程式設計(上)

 

知識點1:使用陣列程式設計的優點

NumPy陣列使你可以將許多種資料處理任務表述為簡潔的陣列表示式(否則需要編寫迴圈)。用陣列表示式代替迴圈的做法,通常被稱為向量化。一般來說,向量化陣列運算要比等價的純Python方式快上一兩個數量級(甚至更多),尤其是各種數值計算。

作為簡單的例子,假設我們想要在一組值(網格型)上計算函式sqrt(x^2+y^2)。np.meshgrid函式接受兩個一維陣列,併產生兩個二維矩陣(對應於兩個陣列中所有的(x,y)對)

教程|使用陣列進行陣列程式設計(上)

 

現在,對該函式的求值運算就好辦了,把這兩個陣列當做兩個浮點數那樣編寫表示式即可:

教程|使用陣列進行陣列程式設計(上)

 

使用上面生成的資料進行構圖

教程|使用陣列進行陣列程式設計(上)

 

教程|使用陣列進行陣列程式設計(上)

 

知識點2:將條件邏輯表述為陣列運算

numpy.where函式是三元表示式x if condition else y的向量化版本。假設我們有一個布林陣列和兩個值陣列:

教程|使用陣列進行陣列程式設計(上)

 

假設我們想要根據cond中的值選取xarr和yarr的值:當cond中的值為True時,選取xarr的值,否則從yarr中選取。列表推導式的寫法應該如下所示:

教程|使用陣列進行陣列程式設計(上)

 

np.where的第二個和第三個引數不必是陣列,它們都可以是標量值。在資料分析工作中,where通常用於根據另一個數組而產生一個新的陣列。假設有一個由隨機資料組成的矩陣,你希望將所有正值替換為2,將所有負值替換為-2。若利用np.where,則會非常簡單:

教程|使用陣列進行陣列程式設計(上)

 

使用np.where,可以將標量和陣列結合起來。例如,我可用常數2替換arr中所有正的值:

教程|使用陣列進行陣列程式設計(上)

 

傳遞給where的陣列大小可以不相等,甚至可以是標量值。

知識點3:數學和統計方法

可以通過陣列上的一組數學函式對整個陣列或某個軸向的資料進行統計計算。sum、mean以及標準差std等聚合計算(aggregation,通常叫做約簡(reduction))既可以當做陣列的例項方法呼叫,也可以當做頂級NumPy函式使用。

這裡,我生成了一些正態分佈隨機資料,然後做了聚類統計:

教程|使用陣列進行陣列程式設計(上)

 

mean和sum這類的函式可以接受一個axis選項引數,用於計算該軸向上的統計值,最終結果是一個少一維的陣列:

教程|使用陣列進行陣列程式設計(上)

 

其他如cumsum和cumprod之類的方法則不聚合,而是產生一個由中間結果組成的陣列:

教程|使用陣列進行陣列程式設計(上)

 

在多維陣列中,累加函式(如cumsum)返回的是同樣大小的陣列,但是會根據每個低維的切片沿著標記軸計算部分聚類:

教程|使用陣列進行陣列程式設計(上)

 

基本的陣列統計方法

教程|使用陣列進行陣列程式設計(上)

 

教程|使用陣列進行陣列程式設計(上)

 

教程|使用陣列進行陣列程式設計(上)

 

教程 | Jupyter Notebook初級教程——迷死人的基礎操作

教程 | Jupyter Notebook基礎教程——快捷鍵的使用

教程 | Python之Numpy ndarray 基本介紹 1

教程 | Python之Numpy ndarray 基本介紹 2

教程 | Python之Numpy ndarray 基本介紹 3

教程|Python之Numpy ndarray 基本介紹 4

教程 | 通用函式:快速的元素級陣列函式

點選 瞭解更多 ,動手操作

— End —

教程|使用陣列進行陣列程式設計(上)