1. 程式人生 > >Numpy_06 陣列的檔案輸入輸出 線性代數

Numpy_06 陣列的檔案輸入輸出 線性代數

將陣列寫入本地,將陣列從本地讀取

import numpy as np
# NumPy能夠讀寫磁碟上的文字資料或二進位制資料。
# np.save和np.load是讀寫磁碟陣列資料的兩個主要函式。預設情況下,陣列是以未壓縮的原始二進位制格式儲存在副檔名為.npy的檔案中的:
arr = np.arange(10)  # 生成一個數組
np.save('some_array', arr)  # 儲存陣列 arr 名稱為 'some_array'
# 如果檔案路徑末尾沒有副檔名.npy系統會預設加上
print(np.load('some_array.npy'))
# 通過np.savez可以將多個數組儲存到一個未壓縮檔案中,將陣列以關鍵字引數的形式傳入即可
np.savez('array_archive.npz', a=arr, b=arr) arch = np.load('array_archive.npz') print(arch['b']) # 如果要將資料壓縮,可以使用numpy.savez_compressed: np.savez_compressed('arrays_compressed.npz', a=arr, b=arr)

線性代數

線性代數(如矩陣乘法、矩陣分解、行列式以及其他方陣數學等)是任何陣列庫的重要組成部分。 不像某些語言(如MATLAB),通過*對兩個二維陣列相乘得到的是一個元素級的積,而不是一個矩陣點積。 因此,NumPy提供了一個用於矩陣乘法的dot函式(既是一個數組方法也是numpy名稱空間中的一個函式):

x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])

print(x)
print(y)
print(x.dot(y))  # 等價於 print(np.dot(x, y))

# 一個二維陣列跟一個大小合適的一維陣列的矩陣點積運算之後將會得到一個一維陣列:
print(np.ones(3))  # 生成一個 陣列 值為 1
print(np.dot(x, np.ones(3)))  # 點積

print(x @ np.ones(3))  # 點積 相等於 dot

numpy.linalg

numpy.linalg中有一組標準的矩陣分解運算以及諸如求逆和行列式之類的東西。 它們跟MATLAB和R等語言所使用的是相同的行業標準線性代數庫, 如BLAS、LAPACK、Intel MKL(Math Kernel Library,可能有,取決於你的NumPy版本)等:

from numpy.linalg import inv, qr

X = np.random.randn(5, 5)  # 隨機生成一個 5 * 5 的矩陣
mat = X.T.dot(X)  # X的轉置 點乘X
print('inv(mat):\n', inv(mat))  # 求方陣的逆  原陣乘逆陣為單位矩陣
print('mat.dot(inv(mat)):\n', mat.dot(inv(mat)))  # 矩陣點乘 自己的逆陣

q, r = qr(mat)
print('q:\n', q)
print('r:\n', r)

常用函式表