Numpy庫學習

Numpy庫學習

來自專欄 Python程序員

最近在學習科學計算相關的Python庫,因此先來整理一下Numpy這個最基本的庫。

下面是首先導入numpy和matplotlib庫

import numpy as npimport matplotlib.pyplot as plt

Numpy中包含ndarray和matrix兩個對象,而其中ndarray又是非常常用的多維數組對象。

1、創建ndarray數組

data = np.array([[2,4,5,6],[2,3,1,3]])data

array([[2, 4, 5, 6], [2, 3, 1, 3]])

能夠創建ndarray的np函數有array(),arrang(),linespace(),ones(),zeros()

data2 = np.linspace(1,20,20)data2

array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20.])

2 、ndarray的一些參數

data.dtype,data.shape,data.ndim

(dtype(int32), (2, 4), 2)

data.shape

(2, 4)

data.ndim

2

3、索引和切片

data[:,2:3],data[0:2,[1,2]]

(array([[5], [1]]), array([[4, 5], [3, 1]]))

data[0:2,[1,2]]

array([[4, 5], [3, 1]])

直接索引和切片是比較簡單的查找數據的方式,通過這種方式得到的仍然是ndarray對象,並且是原對象的淺拷貝,如果需要深拷貝建立副本的話使用copy()函數即可。索引中有一種比較重要又難以理解的的方式,布爾型索引。

names = np.array([zhou,li,wang,zhang])names == zhou

array([ True, False, False, False], dtype=bool)

data[:,names == zhou]

array([[2], [2]])

data[data > 2] = -1data

array([[ 2, -1, -1, -1], [ 2, -1, 1, -1]])

總結:基本上索引方式都可以認為是索引時傳給數組一個行號的數組,一個列號的數組從而實現索引。

4、數組的一些操作

通常對數組來說有reshape(),transpose()來進行數組形狀的改變。

除此之外還有一些元素級別的操作例如abs(),add()等,這兩個部分較為簡單。

利用np.where進行一些判斷邏輯操作np.where(con,x,y)

arr = np.random.randn(3,4)arr

array([[ 0.43902481, -0.71598515, -0.29229109, 1.47960366], [-0.41818462, -0.51393751, -0.13377322, -1.4436627 ], [ 0.18593743, 1.15210741, -0.67014517, 2.2018497 ]])

np.where(arr>0,2,-2)

array([[ 2, -2, -2, 2], [-2, -2, -2, -2], [ 2, 2, -2, 2]])

此外,還有一些數據統計的函數例如sum,sort,mean,可以計算出總體或者某行某列的數值。

arr.sort(axis = 1)arr

array([[-0.71598515, -0.29229109, 0.43902481, 1.47960366], [-1.4436627 , -0.51393751, -0.41818462, -0.13377322], [-0.67014517, 0.18593743, 1.15210741, 2.2018497 ]])

names = np.append(names,zhou)np.unique(names)

array([li, wang, zhang, zhou], dtype=<U5)

5、線性代數和隨機數

numpy中的線性代數操作主要是包含在linalg這個模塊中,我用的比較少,可能會用到的就是dot,inv,qr

而隨機數就相對來說比較有用,可以主要掌握以下幾個模塊。

np.random.rand(2,4) # 產生0~1的隨機數

array([[ 0.26970185, 0.40492813, 0.17614584, 0.54370365], [ 0.03209999, 0.28651036, 0.74425983, 0.02604322]])

np.random.randn(2,4) # 產生標準正態分布(0,1)

array([[-1.27238813, 0.25136539, -1.68008268, -1.28196789], [ 0.38298877, -0.35651327, 0.54964306, 0.98343527]])

np.random.randint(1,10) # 上下限範圍內隨機整數

3

6、矩陣相關

matrix的意義在於使矩陣操作更加像matlab中的操作,這樣既簡單又容易移植。但是這裡存在的問題是經常會跟ndarray混淆,所以最好只使用ndarray。但是使用ndarray又有一些很不舒服的地方,比如對一維數組的矩陣相乘就很麻煩。但是我們只需要記住一個結論,當兩個數組shape表示的形式靠近的數相同時,才能相乘。例如:(10,10 * 1) ,(10,10),(1 * 10,10)

矩陣點乘 np.dot(x,y)

a = np.array([0,1,3,4]) #注意這是一維的a,a.ndim

(array([0, 1, 3, 4]), 1)

#使用這樣的數組最好進行轉置b = np.random.rand(4,3)a.dot(b)

array([ 4.68473789, 6.85917889, 5.20869666])

還有一點要注意的就是數組的維度,使用reshape來轉換時,reshape(裡面加元組變成多維變數,加整數為一維變數)

推薦閱讀:

課程資源 | Python語言系列專題MOOC
【翻譯】《利用Python進行數據分析·第2版》第3章(下)Python的數據結構、函數和文件
利用Python進行數據分析——繪圖和可視化(八)(1)
python如何定義坐標?
pandas可視化(1)【官方文檔解讀】--基礎繪圖

TAG:科學計算 | Python | numpy |