最近在編輯有關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]]