セクション
scipyのダウンロード線形代数パッケージは、効率的な線形代数演算機能を備えた、ATLAS LAPACK BLASライブラリーの構築を使用して最適化されています。
代数パッケージ機能線形、操作対象は、二次元アレイです。
SciPy.linalgとNumPy.linalgは
NumPy.linalgと比較して、scipy.linalgが見つかりませんをnumpy.linalg高度な機能を持っても、numpy.linalgのすべての機能が含まれています。
リニア式
scipy.linalg.solve関数は、線形方程式のために使用することができます。例えば、$のための線形方程式* X + B * Y = Z $、決定された未知のx、yの値。
例
以下の連立方程式を解きます:
$$
X + 3Y + 5Z = 10 \
2X + 5Y + Z = 8 \
2X + 3Y + 8Z = 3
$$
上記の式は、行列として表すことができます。
$$
\ [左
\ {行列}開始
1・3・5 \
2・5・1 \
2&3&8
\端{行列}
\右]
\左[
{行列}開始\
X \
Y \
Z
\端{行列}
= \権利]
\左[
{行列}開始\
10 \
8 \
3
\端{行列}
\右]
$$
以下に示すように、行列を用いて上記式を解きます。
$$
\左[
{行列}開始\
X \
Y \
Z
\端{行列}
\権利]
=
\ [左
{行列}開始\
1&3&5 \
2・5・1 \
2&3&8
\端{行列}
\右] ^ { - 1}
\左[
{行列}開始\
10 \
8 \
3
\端{行列}
\右]
= \ FRAC {1} {25}
\ [左
\ {行列}開始
-232 \
129 \
19
\端{行列}
\右]
=
\ [左
\ {行列}開始
-9.28 \
5.16 \
0.76
\端{行列}
\右]
$$
ここでは、解決するためにscipyのダウンロードを使用しています。
scipy.linalg.solve
関数は、2つの入力、配列受け付けるa
とアレイをb
、アレイは、a
係数配列を表し、b
等号の右辺の値を示し、得られた溶液を返すために、アレイに配置されます。
私たちは、次の例を考えてみましょう。
# 导入scipy和numpy包
from scipy import linalg
import numpy as np
# 声明numpy数组
a = np.array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])
b = np.array([10, 8, 3])
# 求解
x = linalg.solve(a, b)
# 输出解值
print (x)
輸出
[-9.28 5.16 0.76]
決定計算
A | |行列Aの行列が$として表され$、行列演算処理は、一般的な線形代数です。
scipyのダウンロードが使用できるdet()
入力として受け入れ、スカラー値、マトリックスの、すなわち、行列式を返す行列の行列式を計算する関数。
例
# 导入scipy和numpy包
from scipy import linalg
import numpy as np
# 声明numpy数组
A = np.array([[3,4],[7,8]])
# 计算行列式
x = linalg.det(A)
# 输出结果
print (x)
輸出
-4.0
固有値と固有ベクトルを取得
固有値、固有ベクトルを取得、線形代数の一般的な計算です。
一般的に、以下の関係によれば、特性値(λ)行列(A)、固有ベクトル(V)を取得します。
$$消灯=λV$$
scipy.linalg.eig関数が計算固有値及び固有ベクトルに使用され、関数は固有値と固有ベクトルを返します。
例
# 导入scipy和numpy包
from scipy import linalg
import numpy as np
# 声明numpy数组
A = np.array([[3,4],[7,8]])
# 求解
l, v = linalg.eig(A)
# 打印特征值
print('特征值')
print (l)
# 打印特征向量
print('特征向量')
print (v)
上記の手順は、次の出力を生成します。
特征值
[-0.35234996+0.j 11.35234996+0.j]
特征向量
[[-0.76642628 -0.43192981]
[ 0.64233228 -0.90190722]]
SVD特異値分解
特異値分解(SVD)が今より一般的なアルゴリズムの一つであり、エンジニア、必要なスキルのアルゴリズム1人のエンジニアをマイニングデータです。Aが$ M×N $行列であり、行列Uは$ M×M $正方形であるV ^ T $(V転置)は、3つのマトリックス、$ U、Σによって分解されると仮定、直交ベクトルである行列、左特異ベクトルと呼ばれ、[シグマ他方が0である間$ M×Nは、と呼ばれる対角の対角要素の値を対角行列を$で特異値; $ V ^ T $(V転置)は$ N×N $行列であり、ベクトル行列も直交する右特異ベクトルと呼ばれます。
$$ A_ {M \回{N} = U_ {M \回{M}}Σ_{M \回{N}} V_ {N \回{N}} ^ T $$
私たちは、次の例を考えてみましょう。
# 导入scipy和numpy包
from scipy import linalg
import numpy as np
# 声明numpy数组
a = np.random.randn(3, 2) + 1.j*np.random.randn(3, 2)
# 输出原矩阵
print('原矩阵')
print(a)
# 求解
U, s, Vh = linalg.svd(a)
# 输出结果
print('奇异值分解')
print(U, "#U")
print(Vh, "#Vh")
print(s, "#s")
上記の手順は、次の出力を生成します。
原矩阵
[[ 1.81840014+0.16615057j -0.47446573-2.36327076j]
[-0.19366846-0.44489565j -0.03227288+0.02260894j]
[-0.91921239-0.99340761j -1.33606096+0.40858722j]]
奇异值分解
[[-0.84399035+0.03548862j -0.1574924 +0.44602345j 0.08723906-0.23466874j]
[ 0.03893388+0.08672055j -0.19156838-0.45118633j -0.02718865-0.86600053j]
[ 0.23121352+0.47320699j -0.71944217+0.13562682j 0.41089761+0.13336765j]] #U
[[-0.63461867+0.j 0.05670247+0.77074248j]
[ 0.77282543+0.j 0.04656219+0.63290822j]] #Vh
[3.55734783 0.7144458 ] #s