Python的Numpy庫簡述

獵手家園發表於2017-06-28

numpy 是 python 的科學計算庫
import numpy as np

1、使用numpy讀取txt檔案

# dtype = "str":指定資料格式
# delimiter = "\t":指定分割符
# skip_header = 1:跳過第一行
npinfo = np.genfromtxt("titanic_train.txt", delimiter = "\t", dtype = "U75", skip_header = 1)

 

2、ayyay陣列,資料型別是必須相同。

vector = np.array([5, 10, 15, 20])
matrix = np.array([[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60]])
print(vector)
print(matrix)

 

3、numpy的資料型別,一般用到四種資料型別 bool、 int32/64、 float32/64、 string

print(vector.dtype)
print(matrix.dtype)

 

4、獲取第1行的第4個數

npinfo[0, 3]
# 取1-3行和1-3列資料
npinfo[0: 3, 0: 3]
# 如果:省略前後數字表示所有資料
npinfo[:, :]

 

5、判斷array中元素的值

vector == 10
matrix[:, 0] == 25

 

6、取出等於10的元素

token = (vector == 10)
vector[token]

 

7、取出有25的這一行

token_25 = (matrix[:, 0] == 25)
matrix[token_25]

 

8、string 轉 float 型別

vector = np.array(["10", "20", "30", "40"])
vector = vector.astype(float)
print(vector)

 

9、基本運算

vector.sum()    # 求和
vector.mean()    # 均值
matrix.sum(axis = 0)    # 按列求和
matrix.sum(axis = 1)    # 按行求和

 

10、缺失值填補

nan_4 = np.isnan(npinfo[:, 4])
npinfo[nan_4, 4] = 0    # 缺失值填補,對有缺失值的第4列填補0

 

11、使用 numpy 建立陣列和矩陣

# 建立一個3行5列的矩陣
a = np.arange(15).reshape(3, 5)
print(a)

 

12、檢視當前陣列是幾維的

a.ndim

 

13、其它檢視

a.dtype
a.size

 

14、建立一個空矩陣

np.zeros((3, 4))

 

15、建立一個1矩陣 3維

np.ones((3, 4, 5), dtype = np.int32)

 

16、建立有步長的矩陣:np.arange( 起始,結束,步長 )

np.arange( 10, 15, 1 )

 

17、隨機初始化矩陣

np.random.random((3, 4))

 

18、建立一個指定數量的矩陣

# np.linspace( 起始,結束,數量 )
from numpy import pi
np.linspace( 0, 2*pi, 100 )

 

19、求正弦

np.sin(np.linspace( 0, 2*pi, 100 ))

 

20、陣列計算

a = np.array([10, 15, 20, 25])
b = np.arange(4)

a - b
b ** 2 #注意:這個是n次方,不是乘法。
a < 20

 

21、# 求內積 外積

A = np.array( [[1, 2], 
[0, 3]] )
B = np.array( [[2, 0], 
[3, 4]] )

# 內積 對應位置相乘
A * B

# 矩陣相乘
A.dot(B)
np.dot(A, B)
# 矩陣相乘 原理
#A=
#a b c 
#d e f 
#g h i

#B=
#A D 
#B E 
#C F

#A.dot(B)=
#aA+bB+cC aD+bE+cF
#dA+eB+fC dD+eE+fF
#gA+hB+iC gD+hE+iF

 

22、e的x次冪

A = np.arange(3)
np.exp(A)

 

23、開根號

np.sqrt(A)

 

24、向下取整

C = np.floor(10*np.random.random((3, 4)))

 

25、轉化為行向量

C.ravel()

 

26、重新shape,如:由3行4列轉為2行6列

C.shape = (2, 6)

 

27、行列轉置

C.T

 

28、其它reshape方法

C.resize((2, 6))
C.reshape(3, -1)

 

29、矩陣拼接

x = np.floor(10*np.random.random((3, 4)))
y = np.floor(10*np.random.random((3, 4)))

# 按行拼接
np.vstack((x, y))
# 按列拼接
np.hstack((x, y))

 

30、矩陣切分

x = np.floor(10*np.random.random((3, 12)))
# 按列切成3份
np.hsplit(x, 3)
# 如果想切兩刀怎麼辦?
np.hsplit(x, (3, 5))

y = np.floor(10*np.random.random((12, 2)))
# 按行切分
np.vsplit(y, 3)

 

31、矩陣相互賦值問題

z = np.arange(12)

t = z     # 共享記憶體
t is z    # 結果是True
# print(id(t)) 和 print(id(z)) 的結果是一樣的。

t1 = z.view() #共享資料,但不共享記憶體
t1 is z       # 結果是False
# print(id(t)) 和 print(id(z)) 的結果是不同的。

t2 = z.copy() #完全是兩個物件

 

32、排序和索引

data = np.sin(np.arange(20).reshape(5, 4))
# 找最大值
ind = data.argmax(axis = 0)    # 最大值的索引
data_max = data[ind, np.arange(data.shape[1])]
print(data_max)

不過有最函式:data.max(axis = 0)

 

33、# 排序

sx = np.floor(10*np.random.random((3, 4)))
print(np.sort(sx, axis = 0))    # 按列排序
print(np.sort(sx, axis = 1))    # 按行排序
也可以這麼寫:sx.sort(axis = 1)

 

34、複製 tile

a = np.arange(0, 40, 10)
print(a)
# 將a的行復制2倍,列複製3倍
b = np.tile(a, (2, 3))
print(b)

 

35、8*8棋盤矩陣,其中1、3、5、7行和0、2、4、6列的元素置為1;1 ,3,5,7列和0,2,4,6行也是1

z = np.zeros((8,8), dtype = int)
z[1::2,::2] = 1    # 注意:雙冒號的用法
z[::2,1::2] = 1
print(z)

 

36、多賦值方法

z = np.random.random((10,10))
zmin, zmax = z.min(), z.max()

 

37、歸一化,將矩陣規格化到0~1,即最小的變成0,最大的變成1,最小與最大之間的等比縮放

z = 10*np.random.random((5,5))
zmin, zmax = z.min(), z.max()
z = (z-zmin)/(zmax-zmin) #歸一化公式
print(z)

 

38、矩陣相加

z = np.zeros((5,5))
z += np.arange(5)
print(z)

 

39、生成0~10之間均勻分佈的11個數,包括0和10

z = np.linspace(0, 10, 11, endpoint=True, retstep=True)
print(z)

 

40、交換矩陣的其中兩行

a = np.arange(25).reshape(5,5)
a[[0,1]] = a[[1,0]]
print(a)

 

41、找出陣列中與給定值最接近的數

z = np.array([[0,1,2,3],[4,5,6,7]])
a = 5.1
print(np.abs(z-a).argmin())

 

42、判斷二維矩陣中有沒有一整列數為0?

z = np.random.randint(0,3,(2,10))
print(z.any(axis = 0))

 

43、生成二維的高斯矩陣

x,y = np.meshgrid(np.linspace(-1,1,10),np.linspace(-1,1,10))
D = np.sqrt(x**2 + y**2)
sigma, mu = 1, 0
a = np.exp(-(D-mu)**2 / (2*sigma**2))
print(a)

 

相關文章