Python矩陣和Numpy數(shù)組的那些事兒
大家好,我是IT共享者,人稱皮皮。今天給大家介紹矩陣和NumPy數(shù)組。
一、什么是矩陣?
使用嵌套列表和NumPy包的Python矩陣。矩陣是一種二維數(shù)據(jù)結(jié)構(gòu),其中數(shù)字按行和列排列。
二、Python矩陣
1. 列表視為矩陣
Python沒(méi)有矩陣的內(nèi)置類型。但是,可以將列表的列表視為矩陣。
例:
- A = [[1, 4, 5],
- [-5, 8, 9]]
可以將此列表的列表視為具有2行3列的矩陣。
如圖:
2. 如何使用嵌套列表。
- A = [[1, 4, 5, 12],
- [-5, 8, 9, 0],
- [-6, 7, 11, 19]]
- print("A =", A)
- print("A[1] =", A[1]) # 第二行
- print("A[1][2] =", A[1][2]) # 第二行的第三元素
- print("A[0][-1] =", A[0][-1]) # 第一行的最后一個(gè)元素
- column = []; # 空 list
- for row in A:
- column.append(row[2])
- print("3rd column =", column)
當(dāng)運(yùn)行程序時(shí),輸出為:
三、NumPy數(shù)組
1. 什么是NumPy?
NumPy是用于科學(xué)計(jì)算的軟件包,它支持強(qiáng)大的N維數(shù)組對(duì)象。
在使用NumPy之前,需要先安裝它。
2. 如何安裝NumPy?
如果使用Windows,使用PyCharm 安裝NumPy,NumPy它帶有一些其他與數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)有關(guān)的軟件包。
成功安裝了NumPy,就可以導(dǎo)入和使用它。
NumPy提供數(shù)字的多維數(shù)組(實(shí)際上是一個(gè)對(duì)象)。
例 :
- import numpy as np
- a = np.array([1, 2, 3])
- print(a) # 輸出: [1, 2, 3]
- print(type(a)) # 輸出: <class 'numpy.ndarray'>
NumPy的數(shù)組類稱為ndarray。
注:
NumPy的數(shù)組類稱為ndarray。
3. 如何創(chuàng)建一個(gè)NumPy數(shù)組?
有幾種創(chuàng)建NumPy數(shù)組的方法。
3.1 整數(shù),浮點(diǎn)數(shù)和復(fù)數(shù)的數(shù)組
- import numpy as np
- A = np.array([[1, 2, 3], [3, 4, 5]])
- print(A)
- A = np.array([[1.1, 2, 3], [3, 4, 5]]) # 浮點(diǎn)數(shù)組
- print(A)
- A = np.array([[1, 2, 3], [3, 4, 5]], dtype = complex) # 復(fù)數(shù)數(shù)組
- print(A)
運(yùn)行效果:
3.2 零和一的數(shù)組
- import numpy as np
- zeors_array = np.zeros( (2, 3) )
- print(zeors_array)
- ones_array = np.ones( (1, 5), dtype=np.int32 ) // dtype
- print(ones_array) # 輸出: [[1 1 1 1 1]]
在這里,指定dtype了32位(4字節(jié))。因此,該數(shù)組可以采用從到的值。-2-312-31-1
3.使用arange()和shape()
- import numpy as np
- A = np.arange(4)
- print('A =', A)
- B = np.arange(12).reshape(2, 6)
- print('B =', B)
四、矩陣運(yùn)算
兩個(gè)矩陣相加,兩個(gè)矩陣相乘以及一個(gè)矩陣轉(zhuǎn)置。在編寫這些程序之前,使用了嵌套列表。讓看看如何使用NumPy數(shù)組完成相同的任務(wù)。
兩種矩陣的加法
使用+運(yùn)算符將兩個(gè)NumPy矩陣的對(duì)應(yīng)元素相加。
- import numpy as np
- A = np.array([[2, 4], [5, -6]])
- B = np.array([[9, -3], [3, 6]])
- C = A + B # 元素聰明的加法
- print(C)
兩個(gè)矩陣相乘
為了將兩個(gè)矩陣相乘,使用dot()方法。
注意:用于數(shù)組乘法(兩個(gè)數(shù)組的對(duì)應(yīng)元素的乘法),而不是矩陣乘法。
- import numpy as np
- A = np.array([[3, 6, 7], [5, -3, 0]])
- B = np.array([[1, 1], [2, 1], [3, -3]])
- C = A.dot(B)
- print(C)
矩陣轉(zhuǎn)置
使用numpy.transpose計(jì)算矩陣的轉(zhuǎn)置。
- import numpy as np
- A = np.array([[1, 1], [2, 1], [3, -3]])
- print(A.transpose())
注:
NumPy使的任務(wù)更加輕松。
五、案例
1. 訪問(wèn)矩陣元素
與列表類似,可以使用索引訪問(wèn)矩陣元素。讓從一維NumPy數(shù)組開(kāi)始。
- import numpy as np
- A = np.array([2, 4, 6, 8, 10])
- print("A[0] =", A[0]) # First element
- print("A[2] =", A[2]) # Third element
- print("A[-1] =", A[-1]) # Last element
運(yùn)行該程序時(shí),輸出為:
現(xiàn)在,讓看看如何訪問(wèn)二維數(shù)組(基本上是矩陣)的元素。
- import numpy as np
- A = np.array([[1, 4, 5, 12],
- [-5, 8, 9, 0],
- [-6, 7, 11, 19]])
- # First element of first row
- print("A[0][0] =", A[0][0])
- # Third element of second row
- print("A[1][2] =", A[1][2])
- # Last element of last row
- print("A[-1][-1] =", A[-1][-1])
當(dāng)運(yùn)行程序時(shí),輸出將是:
2. 訪問(wèn)矩陣的行
- import numpy as np
- A = np.array([[1, 4, 5, 12],
- [-5, 8, 9, 0],
- [-6, 7, 11, 19]])
- print("A[0] =", A[0]) # First Row
- print("A[2] =", A[2]) # Third Row
- print("A[-1] =", A[-1]) # Last Row (3rd row in this case)
當(dāng)運(yùn)行程序時(shí),輸出將是:
3. 訪問(wèn)矩陣的列
- import numpy as np
- A = np.array([[1, 4, 5, 12],
- [-5, 8, 9, 0],
- [-6, 7, 11, 19]])
- print("A[:,0] =",A[:,0]) # First Column
- print("A[:,3] =", A[:,3]) # Fourth Column
- print("A[:,-1] =", A[:,-1]) # Last Column (4th column in this case)
當(dāng)運(yùn)行程序時(shí),輸出將是:
注:
使用NumPy(而不是嵌套列表)可以更輕松地處理矩陣,而且甚至都沒(méi)有涉及基礎(chǔ)知識(shí)。建議詳細(xì)研究NumPy軟件包,尤其是當(dāng)嘗試將Python用于數(shù)據(jù)科學(xué)/分析時(shí)。
六、總結(jié)
本文基于Python基礎(chǔ),介紹了矩陣和NumPy數(shù)組,重點(diǎn)介紹了NumPy數(shù)組,如何去安裝NumPy模塊,如何去創(chuàng)建一個(gè)NumPy數(shù)組的兩種方式。
通過(guò)案例的分析,代碼的演示,運(yùn)行效果圖的展示,使用Python語(yǔ)言,能夠讓讀者更好的理解。
讀者可以根據(jù)文章內(nèi)容,自己實(shí)現(xiàn)。有時(shí)候看到別人實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問(wèn)題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。
代碼很簡(jiǎn)單,希望對(duì)你學(xué)習(xí)有幫助。