您的位置:首頁>正文

Python 中的 Numpy 總結

最近在編輯有關Python的相關程式, 正好總結了與一下關於 NumPy的庫會用到的語句。

百度百科:NumPy系統是Python的一種開源的數值計算擴展。 這種工具可用來存儲和處理大型矩陣, 比Python自身的嵌套清單(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix))。 據說NumPy將Python相當於變成一種免費的更強大的MatLab系統。

1. 讀取文件

numpy.genfromtxt() 用於讀取 txt 檔, 其中傳入的參數依次為:

需要讀取的 txt 檔位置, 此處檔與程式位於同一目錄下

分割的標記

轉換類型, 如果檔中既有文本類型也有數位類型, 就先轉成文本類型

help(numpy.genfromtxt)用於查看幫助文檔:

如果不想看 API 可以啟動一個程式用 help 查看指令的詳細用法

importnumpy

world_alcohol = numpy.genfromtxt("world_alcohol.txt",delimiter=",",dtype=str)

print(type(world_alcohol))

print(world_alcohol)

print(help(numpy.genfromtxt))

2. 構造 ndarray

numpy.array()構造 ndarray

numpy.array()中傳入陣列參數, 可以是一維的也可以是二維三維的。 numpy 會將其轉變成 ndarray 的結構。

vector = numpy.array([1,2,3,4])

matrix = numpy.array([[1,2,3],[4,5,6]])

傳入的參數必須是同一結構,不是同一結構將發生轉換。

vector = numpy.array([1,2,3,4])

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

均為 int 類型

vector = numpy.array([1,2,3,4.0])

array([1.,2.,3.,4.])

轉為浮點數類型

vector = numpy.array([1,2,'3',4])

array(['1','2','3','4'],dtype='

轉為字元類型

利用 .shape 查看結構

能夠瞭解 array 的結構, debug 時通過查看結構能夠更好地瞭解程式運行的過程。

print(vector.shape)

print(matrix.shape)

(4,)

(2,3)

利用 dtype 查看類型

vector = numpy.array([1,2,3,4])

vector.dtype

dtype('int64')

ndim 查看維度

一維

vector = numpy.array([1,2,3,4])

vector.ndim

1

二維

matrix = numpy.array([[1,2,3],

[4,5,6],

[7,8,9]])

matrix.ndim

2

size 查看元素數量

matrix.size

9

3. 獲取與計算

numpy 能使用切片獲取資料

matrix = numpy.array([[1,2,3],

[4,5,6],

[7,8,9]])

根據條件獲取

numpy 能夠依次比較 vector 和元素之間是否相同

vector = numpy.array([5,10,15,20])

vector == 10

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

根據返回值獲取元素

vector = numpy.array([5,10,15,20])

equal_to_ten = (vector == 10)

print(equal_to_ten)

print(vector[equal_to_ten])

[FalseTrueFalseFalse]

[10]

進行運算之後獲取

vector = numpy.array([5,10,15,20])

equal_to_ten_and_five = (vector == 10) & (vector == 5)

類型轉換

將整體類型進行轉換

vector = numpy.array([5,10,15,20])

print(vector.dtype)

vector = vector.astype(str)

print(vector.dtype)

int64

求和

sum() 能夠對 ndarray 進行各種求和操作, 比如分別按行按列進行求和

matrix = numpy.array([[1,2,3],

[4,5,6],

[7,8,9]])

print(matrix.sum())

print(matrix.sum(1))

print(matrix.sum(0))

45

[61524]

[121518]

sum(1) 是 sum(axis=1)) 的縮寫, 1表示按照 x軸方向求和, 0表示按照y軸方向求和

4. 常用函數

reshape

生成從 0-14 的 15 個數位, 使用 reshape(3,5) 將其構造成一個三行五列的 array。

importnumpy asnp

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

arr

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

[5,6,7,8,9],

[10,11,12,13,14]])

zeros

生成指定結構的預設為 0. 的 array

np.zeros((3,4))

array([[0.,0.,0.,0.],

[0.,0.,0.,0.],

[0.,0.,0.,0.]])

ones

生成一個三維的 array,通過 dtype 指定類型

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

array([[[1,1,1,1],

[1,1,1,1],

[1,1,1,1]],

[[1,1,1,1],

[1,1,1,1],

[1,1,1,1]]])

range

指定範圍和數值間的間隔生成 array, 注意範圍包左不包右

np.arange(0,10,2)

array([0,2,4,6,8])

random 亂數

生成指定結構的亂數, 可以用於生成隨機權重

np.random.random((2,3))

array([[0.86166627,0.37756207,0.94265883],

[0.9768257,0.96915312,0.33495431]])

5. ndarray 運算

元素之間依次相減相減

a = np.array([10,20,30,40])

b = np.array(4)

a - b

array([6,16,26,36])

乘方

a**2

array([100,400,900,1600])

開根號

np.sqrt(B)

array([[1.41421356,0.],

[1.73205081,2.]])

e 求方

np.exp(B)

array([[7.3890561,1.],

[20.08553692,54.59815003]])

向下取整

a = np.floor(10*np.random.random((2,2)))

a

array([[0.,0.],

[3.,6.]])

行列變換

a.T

array([[0.,3.],

[0.,6.]])

變換結構

a.resize(1,4)

a

array([[0.,0.,3.,6.]])

6. 矩陣運算

矩陣之間的運算

A = np.array([[1,1],

[0,1]])

B = np.array([[2,0],

[3,4]])

對應位置一次相乘

A*B

array([[2,0],

[0,4]])

矩陣乘法

print(A.dot(B))

print(np.dot(A,B))

[[54]

[34]]

橫向相加

a = np.floor(10*np.random.random((2,2)))

b = np.floor(10*np.random.random((2,2)))

print(a)

print(b)

print(np.hstack((a,b)))

[[2.3.]

[9.3.]]

[[8.1.]

[0.0.]]

[[2.3.8.1.]

[9.3.0.0.]]

縱向相加

print(np.vstack((a,b)))

[[2.3.]

[9.3.]

[8.1.]

[0.0.]]

矩陣分割

#橫向分割

print(np.hsplit(a,3))

#縱向風格

print(np.vsplit(a,3))

7. 複製的區別

位址複製

通過 b = a 複製 a 的值, b 與 a 指向同一位址, 改變 b 同時也改變 a。

a = np.arange(12)

b = a

print(aisb)

print(a.shape)

print(b.shape)

b.shape = (3,4)

print(a.shape)

print(b.shape)

True

(12,)

(12,)

(3,4)

(3,4)

複製值

通過 a.view() 僅複製值, 當對 c 值進行改變會改變 a 的對應的值, 而改變 c 的 shape 不改變 a 的 shape

a = np.arange(12)

c = a.view()

print(cisa)

c.shape = 2,6

c[0,0] = 9999

print(a)

print(c)

False

[99991234567891011]

[[999912345]

[67891011]]

完整拷貝

a.copy() 進行的完整的拷貝, 產生一份完全相同的獨立的複製

a = np.arange(12)

c = a.copy()

print(cisa)

c.shape = 2,6

c[0,0] = 9999

print(a)

print(c)

False

[01234567891011]

[[999912345]

[67891011]]

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示