Numpy基本語法示例②

昨天講到Numpy的基本語法,今天主要講講它的拷貝以及切割合併的方法。

矩陣的整體運算函數,與其他語言無差別,提一下。

import numpy as npx = np.arange(12).reshape(3,4)y = np.arange(12,24).reshape(3,4)print(x)print()print(y)print()print(np.add(x,y))print(np.sin(x))#結果如下:[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]][[12 13 14 15] [16 17 18 19] [20 21 22 23]][[12 14 16 18] [20 22 24 26] [28 30 32 34]][[ 0. 0.84147098 0.90929743 0.14112001] [-0.7568025 -0.95892427 -0.2794155 0.6569866 ] [ 0.98935825 0.41211849 -0.54402111 -0.99999021]]

索引與提取

import numpy as npx = np.arange(12).reshape(3,4)print(x)print()print(x[0]) #列印x的第0行print()print(x.T[0]) #如果想列印列,需要用T轉置一下print()print(x[0:2]) #截取第0行到第1行print(x[2,3]) #提取2行3列的數#結果:[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]][0 1 2 3][0 4 8][[0 1 2 3] [4 5 6 7]]11

矩陣轉換列表提取所有元素

import numpy as npx = np.arange(12).reshape(3,4)for i in x.flat: print(i)#結果:01234567891011

我們調用flat函數,讓矩陣轉換成列表,逐個列印下來

矩陣的拼接

import numpy as npx = np.floor(20*np.random.random((3,3))) #floor 函數可以進行四捨五入y = np.floor(20*np.random.random((3,3)))print(x)print()print(y)print()print(np.vstack((x,y))) #豎直拼接矩陣print()print(np.hstack((x,y))) #水平拼接矩陣

運行後的結果我們可以看到

[[ 8. 12. 13.] [ 7. 0. 0.] [ 17. 0. 5.]][[ 13. 15. 14.] [ 2. 15. 18.] [ 7. 15. 12.]][[ 8. 12. 13.] [ 7. 0. 0.] [ 17. 0. 5.] [ 13. 15. 14.] [ 2. 15. 18.] [ 7. 15. 12.]][[ 8. 12. 13. 13. 15. 14.] [ 7. 0. 0. 2. 15. 18.] [ 17. 0. 5. 7. 15. 12.]]

可以拼接矩陣,同樣我們也可以分解矩陣

分解矩陣

import numpy as npx = np.arange(12).reshape(2,6)print(x)y = np.split(x,3,axis=1) #保證行不變,對列進行分割,分成3個小矩陣z = np.split(x,2,axis=0) #保證列不變,對行進行分割,分成2個小矩陣print(y)print()print(z)#結果[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]][array([[0, 1], [6, 7]]), array([[2, 3], [8, 9]]), array([[ 4, 5], [10, 11]])][array([[0, 1, 2, 3, 4, 5]]), array([[ 6, 7, 8, 9, 10, 11]])]

在這裡我們提倡直接用split函數,後面用axis = 1或axis = 0來定義橫向縱向分割

不均勻分割

import numpy as npx = np.arange(12).reshape(2,6)print(x)y = np.array_split(x,4,axis=1) #不均勻分割print(y)#結果[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]][array([[0, 1], [6, 7]]), array([[2, 3], [8, 9]]), array([[ 4], [10]]), array([[ 5], [11]])]

在這裡,是2行6列的矩陣,如果我們對列進行分割,分成4份,顯然6不能整除4,這時候我們用np.array_split(x,4,axis=1)可以解決這個問題。

矩陣的淺層拷貝

其實淺層的拷貝,意思大概就是,給一個矩陣一個新名字

import numpy as npx = np.arange(12).reshape(2,6)print(x)y = x #令y = x,即把x賦值給yprint(y is x)#結果[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]]True

我們用y is x 語句來判斷x與y到底是同一個東西,結果返回True,可見兩個完全一樣,對其中任意一個更改,另外一個也會跟著更改。那我們怎麼樣創建一個與X沒有關聯的矩陣呢?

深層拷貝

import numpy as npx = np.arange(12).reshape(2,6)print(x)y = x.copy() #深層拷貝語句print(y)print(y is x)#結果:[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]][[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]]False

我們可以看到此時y與x完全一致,但是返回值是False,表明y與x並沒有關聯。

到這裡,Numpy的基本語法,講完了,如果你有問題,可以留言。

謝謝大家。

推薦閱讀:

《機器學習基石》課程學習總結(三)
嘗試克服一下小夥伴對神經網路的恐懼No.26
一樣的打遊戲,不一樣的酷
第一章:機器學習在能源互聯網中的應用綜述(一)
決策樹與隨機森林

TAG:numpy | TensorFlow | 機器學習 |