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

2021-08-28 21:34:27 字數 2361 閱讀 3133

訪問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 —

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

訪問flyai.club,一鍵建立你的人工智慧專案 知識點4 用於布林型陣列的方法 sum經常被用來對布林型陣列中的true值計數 另外還有兩個方法any和all,它們對布林型陣列非常有用。any用於測試陣列中是否存在乙個或多個true,而all則檢查陣列中所有值是否都是true 這兩個方法也能用於...

使用迴圈進行陣列的賦值

class cat public void info public class arraytest system.out.print 迴圈結束 對於pos陣列的元素來說,用起來完全等同於普通變數 下面即可將陣列元素的值賦給int變數,也可將int變數的值賦給陣列元素 int a pos 1 int ...

使用foreach函式進行陣列訪問

foreach 語句為陣列或者物件集合中的每個元素重複乙個嵌入語句組,foreach語句用於迴圈訪問集合以獲取所需資訊,但不可用於更改集合內容以避免產生不可預知的 語法結構 foreach 變數名 as value 或者foreach 變數名 as key value 使用foreach進行年月日的...