1.アレイとマットの違い
Pythonのnumpyパッケージは科学計算パッケージです。このパッケージはほとんどの場合に科学計算を実行するときに使用されますが、2つの関数arrayとmatの違いに注意する必要があります。データのタイプは、プログラムのバグの原因を突き止めるのが難しい可能性があります(自己学習)
if __name__ == '__main__':
# 一维
two = [1, 3, 5, 2, 3, 2]
two1 = np.array(two)
print(two) # [1, 3, 5, 2, 3, 2] type:list
print(two1) # [1 3 5 2 3 2] type:tuple
print(two1.shape) # (6,)
print(two1.tolist()) # [1, 3, 5, 2, 3, 2] type:list
print(len(two1.tolist())) # 6
two2 = np.mat(two)
print(two2) # [[1 3 5 2 3 2]] type:tuple
print(two2.shape) # (1, 6)
print(two2.tolist()) # [[1, 3, 5, 2, 3, 2]] type:list
print(len(two2.tolist())) # 1
配列とマットがまだ異なることがわかります。
- 配列: リストを配列に直接変換します。1次元のリストを含みますが、これに限定されません。
- mat: リストのデータを行列に変換します
したがって、コマンドtolist
を使用して配列を変換した後、元の外観に変換することができ、マットのタイプは元の外観とは異なります。
ここでの違いは、1次元の場合に明らかです。次の多緯度の状況に違いはありません。
多次元リストの場合、基本的に配列とマットの間に違いはありませんが、*演算には違いがあります
# 多维数组
two = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
two1 = np.array(two)
print(two)
'''
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''
print(two1)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
'''
print(two1.shape) # (5, 4)
print(two1.tolist())
'''
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''
print(len(two1.tolist())) # 5
two2 = np.mat(two)
print(two2)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
'''
print(two2.shape) # (5, 4)
print(two2.tolist())
'''
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''
print(len(two2.tolist())) # 5
two3=two1.T # 数组转置
two4=two2.T # 矩阵转置
Y=two1 * two1 # 数组相乘:各元素对应相乘
'''
[[ 1 4 9 16]
[ 25 36 49 64]
[ 81 100 121 144]
[169 196 225 256]
[289 324 361 400]]
'''
#Y1 = np.dot(two1, two1) # dot()函数是矩阵乘,而*则表示逐个元素相乘; 5x4 和 5x4 矩阵乘报错
Y1 = np.dot(two1, two1.T) # 可以将two1其转置 然后矩阵乘
'''
[[ 30 70 110 150 190]
[ 70 174 278 382 486]
[ 110 278 446 614 782]
[ 150 382 614 846 1078]
[ 190 486 782 1078 1374]]
'''
Y4 = two2 * two2.T # 矩阵相乘:等同于 p.dot(two2, two2.T)
'''
[[ 30 70 110 150 190]
[ 70 174 278 382 486]
[ 110 278 446 614 782]
[ 150 382 614 846 1078]
[ 190 486 782 1078 1374]]
'''
要約:numpyでの配列(配列)とマット(行列)の違い
行列は配列の分岐であり、行列と配列は多くの場合一般的ですが、どちらを使用しても同じです。しかし現時点では、両方が普遍的である場合は配列を選択することを当局は提案しました。配列はより柔軟で高速であるため、多くの人々も2次元配列を行列に変換します。
しかし、行列の利点は比較的単純な演算記号です。たとえば、2つの行列の乗算は記号*を使用しますが、配列の乗算はこの方法では使用できません。array.dot
の利点() 配列の利点は、2次元を表すだけでなく、 3、4、5 ...次元を表し、ほとんどのPythonプログラムでは、配列もより一般的に使用されます。
ドット法の使用
参考ブログ:https : //www.cnblogs.com/Shawnyi/p/10370815.html
配列(array)およびマット(matrix)
X [:、0]は、行列Xのすべての行の列0の要素を取得し、X [:、1]は、すべての行の列1の要素を取得します。
X [:、m:n]は、行列Xのすべての行の列mからn-1までのデータを取得します。
X [0、:]は行列Xの0行目のすべての要素を取得することであり、X [1、:]は行列Xの1行目のすべての要素を取得することです。
print(two1[0,:])
'''
[1 2 3 4]
'''
print(two2[:,0])
'''
[[ 1]
[ 5]
[ 9]
[13]
[17]]
'''