データ分析---厄介な基本(2)

前回の記事に続き、numpyでのいくつかの一般的な関数の使用を更新し続けます。ここでは、主にマトリックス操作、マトリックスの作成、IDマトリックス、逆マトリックスの解決など、ワンホットエンコーディング、線形マトリックス固有ベクトル、機能の実行について説明します。値、特異値、決定要因の計算。

1、np.eye()

np.eye():  IDマトリックスを作成するために2次元の対角配列を返すために使用されます

numpy.eye(N、M = None、k = 0、dtype = <class'float '>、order =' C)

  • N:intタイプ、これは出力行の数を意味します

  • M:intタイプ、オプション、出力列の数、そうでない場合、デフォルトはN

  • k:intタイプ、オプション、対角線の添え字。デフォルトは0が主対角線を意味し、負の数は低対角線を意味し、正の数は高対角線を意味します。

  • dtype:データタイプ、オプション、返されたデータのデータタイプ

  • 順序:{'C'、 'F'}、オプション、つまり、出力配列の形式は、C言語の行頭の「C」またはFortran形式の列頭の「F」に従ってメモリに格納されます。

一般的な使用法:

# 创建单位矩阵
A = np.eye(2) 
print("A:",A)
A1 = np.eye(3, k=1)
print("A1:",A1)
A2 = np.eye(3, k=-1)
print("A2:",A2)
A3 = np.eye(3, k=-3)
print("A3",A3)
​
"""
A: [[1. 0.]
 [0. 1.]]
A1: [[0. 1. 0.]
 [0. 0. 1.]
 [0. 0. 0.]]
A2: [[0. 0. 0.]
 [1. 0. 0.]
 [0. 1. 0.]]
A3: [[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
"""

深層学習での使用法:

ワンホットエンコーディング:

    分類アルゴリズムを構築する場合、通常、タグはone_hotエンコーディングである必要があります。実際、タグは整数である可能性があるため、整数をone_hotエンコーディングに変換する必要があります。

    ワンホットエンコーディングは、1ビット実効エンコーディングとも呼ばれ、主にNビットステータスレジスタを使用してN状態をエンコードします。各状態には独自の独立したレジスタビットがあり、常に1ビットのみが有効です。

    ワンホットコーディングは、カテゴリ変数をバイナリベクトルとして表現することです。これには、最初に分類値を整数値にマッピングする必要があります。次に、すべてゼロである整数のインデックスを除いて、各整数値はバイナリベクトルとして表され、1としてマークされます。

例1:

#设置类别的数量
num_classes = 10
#需要转换的整数
arr = [1,3,4,5,9]
#将整数转为一个10位的one hot编码
print(np.eye(10)[arr])
"""
运行结果:
[[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]
"""

例2:

labels=np.array([[1],[2],[0],[1]])
print("labels的大小:",labels.shape,"\n")
#因为我们的类别是从0-2,所以这里是3个类
a=np.eye(3)[1]
print("如果对应的类别号是1,那么转成one-hot的形式",a,"\n")
a=np.eye(3)[2]
print("如果对应的类别号是2,那么转成one-hot的形式",a,"\n")
a=np.eye(3)[1,0]
print("1转成one-hot的数组的第一个数字是:",a,"\n")
#这里和上面的结果的区别,注意!!!
a=np.eye(3)[[1,2,0,1]]
print("如果对应的类别号是1,2,0,1,那么转成one-hot的形式\n",a)
res=np.eye(3)[labels.reshape(-1)]
print("labels转成one-hot形式的结果:\n",res,"\n")
print("labels转化成one-hot后的大小:",res.shape)
"""
运行结果:
labels的大小: (4, 1) 
如果对应的类别号是1,那么转成one-hot的形式 [0. 1. 0.] 
如果对应的类别号是2,那么转成one-hot的形式 [0. 0. 1.] 
1转成one-hot的数组的第一个数字是: 0.0 
如果对应的类别号是1,2,0,1,那么转成one-hot的形式
 [[0. 1. 0.][0. 0. 1.][1. 0. 0.][0. 1. 0.]]
labels转成one-hot形式的结果:
 [[0. 1. 0.][0. 0. 1.] [1. 0. 0.] [0. 1. 0.]]
labels转化成one-hot后的大小:(4, 3)
"""

2、np.identity()

np.identity():n * n平方行列を作成するために使用されます

np.identity(n、dtype = None)

  • n:  intタイプは、出力マトリックスの行数と列数が両方ともnであることを示します。

  • dtype:  出力のタイプを示します。デフォルトはfloatです。

  • 戻り値: n * nの主対角が1で、残りが0の配列

この関数とnp.eye()関数の違いは、この関数は正方形の行列しか作成できないことです。つまり、N = M

a=np.identity(3)
print(a)
"""
运行结果:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
"""

3、np.mat()

np.mat():2次元でなければならないマトリックスを作成するために使用されます。

np.mat(data、dtype = None)

  • データ:配列

  • dtype:出力のタイプを示します

# 创建矩阵
A = np.mat('1 2 3; 4 5 6; 7 8 9') 
B=np.mat([[1,9,7], [3,9,4]])
print('A:',A)
print('B:',B)
print('A的转置:',A.T)  # 矩阵的转置
print('B逆矩阵:',B.I) # 逆矩阵
"""
运行结果:
A: [[1 2 3] [4 5 6] [7 8 9]]
B: [[1 9 7] [3 9 4]]
A的转置: [[1 4 7] [2 5 8] [3 6 9]]
B逆矩阵:[[-0.17138599  0.20938897]
           [-0.04023845  0.12742176]
           [ 0.21907601 -0.19374069]]
"""

4. np.linalg.inv()

np.linalg.inv():逆行列を計算します

np.linalg.inv(A):ここで、Aは行列形式です。

# 创建A矩阵
A = np.mat("0 1 2; 1 0 3; 4 -3 8")
print("A:", A)
​
# 计算逆矩阵
inverse = np.linalg.inv(A)
print("inverse of A:", inverse)
"""
运行结果:
A: [[ 0  1  2] [ 1  0  3] [ 4 -3  8]]
inverse of A: [[-4.5  7.  -1.5]
     [-2.   4.  -1. ]  [ 1.5 -2.   0.5]]
"""

5. np.linalg.solve()

np.linalg.solve():線形行列方程式または線形スカラー方程式を解き ます

np.linalg.solve(a、b)

  • a:係数行列

  • b:縦座標または「従属変数」値

例1:線形方程式3 * x0 + x1 = 9およびx0 + 2 x1 = 8の解を解きます。

# 求解方程系统3 * x0 + x1 = 9和x0 + 2 x1 = 8
a = np.array([[3,1], [1,2]])
b = np.array([9,8])
x = np.linalg.solve(a, b)
print("solution",x)
# 使用dot函数检查是否正确
np.allclose(np.dot(a, x), b)
"""
运行结果:
solution [2. 3.]
True
"""

例2:x0-2 * x1 + x2 = 0、2 * x1-8 * x2 = 8、-4 * x0 + 5 * x1 + 9 * x2 = -9の解を解きます

# 求解线性方程组
# x0 - 2*x1+x2=0,2*x1-8*x2=8, -4*x0+5*x1+9*x2=-9
A = np.mat("1 -2 1;0 2 -8; -4 5 9")
print("A:",A)
b = np.array([0, 8, -9])
print("b:",b)
​
# 调用solve函数求解线性方程组
x = np.linalg.solve(A, b)
print("solution", x)
​
# 使用dot函数检查是否正确
print("check:", np.dot(A, x))
"""
运行结果:
A: [[ 1 -2  1]  [ 0  2 -8] [-4  5  9]]
b: [ 0  8 -9]
solution [29. 16.  3.]
check: [[ 0.  8. -9.]]
"""

6. np.linalg.eig()

numpy.linalg.eig(A):行列の固有値と右固有ベクトルを計算します。Aは複素数または実数値の行列です。

np.linalg.eigvals(A): 一般行列の固有値を計算します

# 求解特征值和特征向量
A = np.mat("3 -2;1 0")
print(A)
​
# 求解特征值
print("eigenvalues",np.linalg.eigvals(A))
​
# 求解特征向量和特征值
# eig函数返回一个元组, 按列排放着特征值和特征向量
eig_values, eig_vectors = np.linalg.eig(A)
​
print("eig_values:", eig_values)
print("eig_vectors:", eig_vectors)
​
# 使用dot函数验证是否正确计算 Ax = ax
for i in range(len(eig_values)):
    print("left:", np.dot(A, eig_vectors[:,i]))
    print("right:", eig_values[i] * eig_vectors[:,i])
 """
 运行结果:
 [[ 3 -2][ 1  0]]
eigenvalues [2. 1.]
eig_values: [2. 1.]
eig_vectors: [[0.89442719 0.70710678][0.4472136  0.70710678]]
left: [[1.78885438][0.89442719]]
right: [[1.78885438][0.89442719]]
left: [[0.70710678][0.70710678]]
right: [[0.70710678][0.70710678]]
 "

7. np.linalg.svd()

np.linalg.svd(): 特異値分解、戻り値はs、u、v

numpy.linalg.svd(a、full_matrices = 1、compute_uv = 1)

  • a:  は(M、N)の形式の行列です

  • full_matrices:値は0または1で、デフォルト値は1です。このとき、uのサイズは(M、M)、vのサイズは(N、N)です。それ以外の場合、uのサイズは(M、K)、vのサイズは(K、N)、K = min(M、N)です。

  • compute_uv:値は0または1です。デフォルト値は1です。これは、u、s、vが計算されることを意味します。0の場合、sのみが計算されます。

# 奇异值分解
A = np.mat("4 11 14;8 7 -2")
​
# 使用svd函数分解矩阵
U, Sigma, V = np.linalg.svd(A, full_matrices=False)
print(U.shape, V.shape, Sigma.shape)
print("svd: ",U * np.diag(Sigma) *V)
"""
​
运行结果:
(2, 2) (2, 3) (2,)
svd:  [[ 4. 11. 14.][ 8.  7. -2.]]
"""

8. np.linalg.det()

np.linalg.det(A):配列の決定要因を計算します

# 计算矩阵的行列式
A = np.mat("3 4;5 6")
print("行列式:", np.linalg.det(A))
"""
运行结果:
行列式:-1.9999999999999971
​"""

コードの取得:WeChatで以下のQRコードをスキャンし、バックグラウンドで「numpy」と返信してコードを取得します

 

おすすめ記事:

Python画像認識-画像類似性の計算

簡単な検証コード認識-コードの実装

win10の下にTensorFlowのGPUバージョン(cuda + cudnn)をインストールします

TensorFlow-GPU線形回帰視覚化コード、および問題の要約

すべてのクローラー記事の分類

セレンベースの自動スライド検証コードクラッキング

58job、Ganji job、Zhaopinの募集をクロールし、データ分析を使用してechartsグラフを生成します

おすすめ

転載: blog.csdn.net/weixin_39121325/article/details/96304150