SciPy Linalg SciPy输入和输出 SciPy Ndimage SciPy是使用优化的 ATLAS LAPACK 和 BLAS 库构建的。它具有非常快的线性代数能力。所有这些线性代数例程都需要一个可以转换为二维数组的对象。这些例程的输出也是一个二维数组。 SciPy.linalg vs NumPy.linalg scipy.linalg包含numpy.linalg中的所有函数。另外,scipy.linalg还有一些不在numpy.linalg中的高级函数。在numpy.linalg上使用scipy.linalg的另一个优点是它总是用BLAS / LAPACK支持编译,而对于NumPy,这是可选的。因此,根据NumPy的安装方式,SciPy版本可能会更快。 线性方程组 所述 scipy.linalg.solve 特征求解线性方程 X + B Y = Z,对于未知的x,y值。 作为一个例子,假设需要求解下面的联立方程。 x + 3y + 5z = 10 2x + 5y + z = 8 2x + 3y + 8z = 3 为了求解x,y,z值的上述方程式,我们可以使用矩阵求逆来求解解向量,如下所示。 ⎡⎣⎢Xÿž⎤⎦⎥= ⎡⎣⎢1223五3五18⎤⎦⎥- 1⎡⎣⎢1083⎤⎦⎥= 125⎡⎣⎢- 23212919⎤⎦⎥= ⎡⎣⎢- 9.285.160.76⎤⎦⎥。[xyz]=[135251238]−1[1083]=125[−23212919]=[−9.285.160.76]. 但是,最好使用 linalg.solve 命令,该命令可以更快,更稳定。 求解函数采用两个输入'a'和'b',其中'a'表示系数,'b'表示相应的右侧值并返回解矩阵。 让我们考虑下面的例子。 #importing the scipy and numpy packages from scipy import linalg import numpy as np #Declaring the numpy arrays a = np.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]]) b = np.array([2, 4, -1]) #Passing the values to the solve function x = linalg.solve(a, b) #printing the result array print x 上述程序将生成以下输出。 array([ 2., -2., 9.]) 寻找决定因素 方阵A的行列式通常表示为| A | 并且是线性代数中经常使用的量。在SciPy中,这是使用 det() 函数计算的。它将矩阵作为输入并返回一个标量值。 让我们考虑下面的例子。 #importing the scipy and numpy packages from scipy import linalg import numpy as np #Declaring the numpy array A = np.array([[1,2],[3,4]]) #Passing the values to the det function x = linalg.det(A) #printing the result print x 上述程序将生成以下输出。 -2.0 特征值和特征向量 特征值 - 特征向量问题是最常用的线性代数运算之一。我们可以通过考虑以下关系式来找到方阵(A)的特征值(λ)和相应的特征向量(v) Av =λv scipy.linalg.eig 从普通或广义特征值问题计算特征值。该函数返回特征值和特征向量。 让我们考虑下面的例子。 #importing the scipy and numpy packages from scipy import linalg import numpy as np #Declaring the numpy array A = np.array([[1,2],[3,4]]) #Passing the values to the eig function l, v = linalg.eig(A) #printing the result for eigen values print l #printing the result for eigen vectors print v 上述程序将生成以下输出。 array([-0.37228132+0.j, 5.37228132+0.j]) #--Eigen Values array([[-0.82456484, -0.41597356], #--Eigen Vectors [ 0.56576746, -0.90937671]]) 奇异值分解 奇异值分解(SVD)可以被认为是特征值问题扩展到非矩阵的矩阵。 所述 scipy.linalg.svd 因子分解矩阵“A”成两个酉矩阵“U”和“VH”和奇异值(真实的,非负)这样的一个1-d阵列的'一个==ù S Vh,其中'S'是具有主对角线's'的适当形状的零点矩阵。 让我们考虑下面的例子。 #importing the scipy and numpy packages from scipy import linalg import numpy as np #Declaring the numpy array a = np.random.randn(3, 2) + 1.j*np.random.randn(3, 2) #Passing the values to the eig function U, s, Vh = linalg.svd(a) # printing the result print U, Vh, s 上述程序将生成以下输出。 ( array([ [ 0.54828424-0.23329795j, -0.38465728+0.01566714j, -0.18764355+0.67936712j], [-0.27123194-0.5327436j , -0.57080163-0.00266155j, -0.39868941-0.39729416j], [ 0.34443818+0.4110186j , -0.47972716+0.54390586j, 0.25028608-0.35186815j] ]), array([ 3.25745379, 1.16150607]), array([ [-0.35312444+0.j , 0.32400401+0.87768134j], [-0.93557636+0.j , -0.12229224-0.33127251j] ]) ) SciPy输入和输出 SciPy Ndimage