1. 程式人生 > >Numpy科學計算從放棄到入門

Numpy科學計算從放棄到入門

目錄

  • 什麼是Numpy
  • 一、如何建立陣列
  • 二、如何訪問陣列
  • 三、如何做算數運算
  • 四、如何使用統計函式
  • 五、如何轉置陣列和反轉
  • 六、如何去重、計算差集並集等集合操作
  • 七、如何生成隨機數
  • 八、如何輸入輸出檔案

什麼是Numpy

Numpy是Python科學計算的基礎包,不僅是python中使用最多的第三方庫,還是SciPy、Pandas等資料科學的基礎庫。所提供的結構比Python自身的更高階、更高效。
可以說,Numpy所提供的資料結果是Python資料分析的基礎。
標準的Python用列表list儲存陣列的值,list的元素在系統中記憶體是分散儲存的,而Numpy的陣列結構是儲存在一個均勻連續的記憶體塊中,遍歷所有的元素更高效,節省了計算資源。
主要提供了以下功能:

  • 快速高效的多維陣列物件的ndarray
  • 用於對陣列執行元素級計算以及直接對陣列執行數學運算的函式
  • 用於讀寫硬碟上基於陣列的資料集的工具
  • 線性代數運算、傅立葉變換,以及隨機陣列生成
  • 用於將C、C++、Fortran程式碼整合到Python的工具
  • 作為演算法之間傳遞資料的容器,對於數值型資料,Numpy陣列在儲存和處理資料時要比內建的Python資料結構高效得多

numpy提供了一個ndarray物件,多維陣列的含義,維度稱為rank(秩),每個線性的陣列稱為一個axes(軸)。陣列是有屬性的,可以通過函式shape獲得陣列的大小,通過dtype獲得元素的屬性

相關幫助文件

  • 官方文件
  • 中文快速入門
  • 參考手冊

一、如何建立陣列

  • array
    將輸入資料(列表、元組、陣列或其他序列型別)轉換為ndarray。要麼推斷出dtype,要麼顯示指定dtype
  • asarray
    將輸入轉換為ndarray,如果輸入本身就是一個ndarray就不再複製
    array和asarray都可以將結構資料轉化為ndarray,但是主要區別就是當資料來源是ndarray時,array仍然會copy出一個副本,佔用新的記憶體,但asarray不會
  • arange
    類似內建的range,返回一個ndarray

  • linspace
    和arrange的作用一樣,只是包含指定的最終值

  • zeros、zeros_like
    根據指定的形狀和dtype建立一個全是9的陣列。
    zeros_like以另一個數組為引數,並根據其形狀和dtype建立一個全0陣列

  • ones、ones_like
    根據指定的形狀和dtype建立一個全是1的陣列。
    ones_like以另一個數組為引數,並根據其形狀和dtype建立一個全1陣列

  • empty、empty_like
    類似ones和ones_like,只是產生的是全0陣列

  • eye、identity
    建立一個正方的N*N單位矩陣,對角線為1,其餘為0

二、如何訪問陣列

  • 下標索引
    arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
    arr2d[0][2]和arr2d[0,2]是等價的

  • 切片索引
    可以一次傳入多個切片,
    arr2d[:2, 1:]

  • 布林型索引

將data中所有負值都設定為0

data[data < 0] = 0
  • 選出所有名字為“cqh”的所有行
data[names == 'cqh']
  • 整數索引
    利用整數陣列進行索引
arr = np.empty((8,4))
for i in range(8):
    arr[i] = i
傳入指定順序
arr[[4,3,0,6]]
* 負數索引 
arr[[-3,-5,-7]]
  • 方形索引
    使用np.ix_方法,可以將兩個一維整數陣列轉換為一個用於選取方形區域的索引
arr = np.arange(32).reshape((8,4))

獲取行[1,5,7,2],列[0,3,1,2],為

arr[np.ix_([1,5,7,2],[0,3,1,2])]

相當於執行了

arr[[1,5,7,2]][:,[0,3,1,2]]

錯誤方法:

arr[[1,5,7,2],[0,3,1,2]]

三、如何做算數運算

x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
np.add(x1, x2)
np.subtract(x1, x2)
np.multiply(x1, x2)
np.divide(x1, x2)
np.power(x1, x2)
np.remainder(x1, x2)

四、如何使用統計函式

預設axis=0代表沿著列統計,axis=1代表沿著行統計

  • amax:矩陣中的最大值
  • amin:矩陣中的最小值
  • ptp:統計最大值與最小值的差
  • percentile:統計陣列的百分位數
  • median:統計中位數
  • mean:平均數
  • average:加權平均值(需要傳入各個元素的權重)
  • std:標準差
  • var:方差

五、如何轉置陣列和反轉

  • reshape
arr = np.arange(15).reshape((3,5))

  • T
arr.T

六、如何去重、計算差集並集等集合操作

  • unique(x):計算x中的唯一元素,並返回有序結果
  • intersect1d(x,y):計算x和y中的公共元素,並返回有序結果
  • union(x,y):計算x和y的並集,並返回有序結果
  • in1d(x,y):得到一個表示“x的元素是否包含在y”的布林型陣列
  • setdiff1d(x,y) 集合的差,元素在x中且不在y中
  • setxor1d(x,y) 集合的對稱差,存在於一個數組中但不同時存在兩個陣列中的元素

七、如何生成隨機數

  • rand:產生均勻分佈的樣本值

  • uniform:產生在[0,1]中均勻分頁的樣本值

  • randn:產生正態分佈(平均值0,標準差1)的樣本值,類似MATLAB介面

  • normal:生成標準正態分佈的樣本陣列

  • randint:在給定的上下限範圍內隨機選取整數

  • seed:確定隨機數生成器的種子
  • permutation:返回一個序列的隨機排列
  • shuffle:對一個序列就地隨機排列
  • bionmial:產生二項分佈的樣本值
  • beta:生產Beta分佈的樣本值
  • chisquare:產生卡方分佈的樣本值
  • gamma:產生Gamma分佈的樣本值

八、如何輸入輸出檔案

以二進位制格式儲存到磁碟

  • np.save:儲存到磁碟
  • np.savez:將多個數組儲存到一個壓縮檔案中,載入時得到一個字典物件
  • np.load:從磁碟載入

存取文字檔案

  • loadtxt:指定各種分隔符
  • savetxt:將陣列寫到以某種分隔符隔開的文字檔案