1つ、PythonNumPyチュートリアル
1はじめに
NumPy(Numerical Python)は、Python言語の拡張ライブラリであり、多数の次元配列と行列演算をサポートします。さらに、配列演算用の多数の数学関数ライブラリも提供します。
2.NumPyNdarrayオブジェクト
NumPyの最も重要な機能の1つは、同じタイプの一連のデータのコレクションであるN次元配列オブジェクトndarrayです。コレクション内の要素のインデックスは0添え字で始まります。(マトリックスを整理するために使用できます)
1)Ndarrayを作成します
直接作成:
matrix2 = np.array([ # 生成矩阵
[1, 2, 3],
[2, 4, 6],
[3, 6, 9],
[4, 8, 12]
])
このメソッドを使用して、特別な行列-empty / zero / onesを作成します。/range(start、stop、step、dtype)
matrix4 = np.zeros((5, 5), dtype=np.int)
print (matrix4)
matrix5 = np.ones((5, 5), dtype=np.int)
print (matrix5)
matrix6 = np.arange(10, 10000, 200)
print (matrix6)
2)配列の属性
[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-SyHDwzWC-1602755542156)(/ Users / yuanbao / Library / Application Support / typora- user-images / image-20201014155955603).png)]
配列の次元-NumPy配列の次元はランクと呼ばれます。ランクは軸の数、つまり配列の次元です。1次元配列のランクは1、2のランクは次元配列は2などです。
matrix3 = np.array([
[
[1, 2, 3]
],
[
[2, 4, 6]
]
])
print (matrix3.ndim)
行列の場合の配列の次元、n行およびm列
matrix2 = np.array([ # 生成矩阵
[1, 2, 3],
[2, 4, 6],
[3, 6, 9],
[4, 8, 12]
])
print (matrix2)
print ("row=" + str(matrix2.shape[0]))
print ("col=" + str(matrix2.shape[1]))
print ("elements=" + str(matrix2.size))
3)配列のスライスとインデックス作成
ndarrayオブジェクトのコンテンツは、Pythonでのリストのスライス操作と同じように、インデックス付けまたはスライスによってアクセスおよび変更できます。
# 切片和索引
a1 = matrix7[2:]
print (a1)
a2 = matrix7[2]
print (a2)
a3 = matrix7[2:9:2] # 不包括停止索引
print (a3)
a4 = matrix2[0] # 二维数组是行的序号
print (a4)
a5 = matrix2[..., 1] # 列向量
print (a5)
3.ブロードキャストメカニズム
ブロードキャストは、numpyがさまざまな形状の配列に対して数値計算を実行する方法です。配列に対する算術演算は通常、対応する要素に対して実行されます。
2つの配列aとbが同じ形状の場合、つまりa.shape == b.shapeの場合、a * bの結果は、a配列とb配列の対応するビットの乗算になります。これには、同じ数の次元と同じ長さの各次元が必要です。
放送ルール:
2つの配列の場合、それぞれの次元を個別に比較し(配列のいずれかに現在の次元がない場合は無視されます)、次の条件を満たす必要があります。
- アレイの形状は同じです。
- 現在の寸法の値は同じです。
- 現在のディメンション値の1つは1です。
条件が満たされない場合、「ValueError:フレームが整列されていません」という例外がスローされます。
プログラムの最初と2番目のセクションは合格しますが、プログラムの3番目のセクションはエラーを報告します。
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
c = a * b
print (c)
a = np.array([[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b = np.array([1, 2, 3])
print(a * b)
a = np.array([[0, 0, 0],
[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])
b = np.array([
[1, 2, 3],
[2, 4, 6]
])
print(a + b)
4. NumPyマトリックスライブラリ(マトリックス)
NumPyには、行列ライブラリnumpy.matlibが含まれています。このモジュールの関数は、ndarrayオブジェクトの代わりに行列を返します。
列(列)要素に配置された行(行)長方形配列の行列。
# coding=utf-8
import numpy.matlib
import numpy as np
matrix = np.arange(20).reshape(4, 5)
p = np.array([1, 1, 1, 1, 1])
matrix = matrix+p
print (matrix)
print ("矩阵的转置为:")
print (matrix.T)
print ("对角矩阵:")
print (np.eye(5, 3))
print ("numpy.matlib.identity() 函数返回给定大小的单位矩阵。")
print (np.matlib.identity(5))
print ("numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。")
print (np.matlib.rand(3, 2))
5.NumPy線形代数ライブラリlinalg
[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-ZPbKbgcz-1602755542162)(/ Users / yuanbao / Library / Application Support / typora- user-images / image-20201014162445558 .png)]
# 求行列式的值|A|
c = np.array([
[11, 12],
[13, 14]
])
print (np.linalg.det(c))
print
# 解方程
a = np.array([
[1, 5],
[2, 1]
])
b = np.array([
[8],
[7]
])
number = a.shape[0]
i = 0
while i < number:
print ("第"+str(i+1)+"个变量的值为:")
print (np.linalg.solve(a, b)[i][0])
i = i+1
# 求矩阵的逆
c = np.array([
[11, 12],
[13, 14]
])
print (np.linalg.inv(c))
6.Numpy I / O機能
Numpyは、ディスク上のテキストデータまたはバイナリデータの読み取りと書き込みを行うことができます。
NumPyでは、ndarrayオブジェクトの単純なファイル形式npyが導入されています。
npyファイルは、ndarrayの再構築に必要なデータ、グラフィック、dtype、およびその他の情報を格納するために使用されます。
一般的に使用されるIO関数は次のとおりです。
- load()関数とsave()関数は、ファイル配列データを読み書きするための2つの主要な関数です。デフォルトでは、配列は、拡張子が.npyのファイルに非圧縮の生のバイナリ形式で保存されます。
- savez()関数は、ファイルに複数の配列を書き込むために使用されます。デフォルトでは、配列は、拡張子が.npzのファイルに非圧縮の生のバイナリ形式で保存されます。
- loadtxt()およびsavetxt()関数は、通常のテキストファイル(.txtなど)を処理します。
a = np.array([
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7]
])
# 保存到 outfile.npy 文件上
np.save('outfile.npy', a)
# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上
np.save('outfile2', a.T)
# 当直接查看文件时,文件是乱码的,因为它们是 Numpy 专用的二进制格式后的数据。
# 我们可以使用 load() 函数来读取数据就可以正常显示了:
b = np.load('outfile2.npy')
print (b)
a = np.array([1, 2, 3, 4, 5])
np.savetxt('out.txt', a)
b = np.loadtxt('in.txt')
print(b)
NumPy MatplotlibPythonプロットライブラリ
Matplotlibは、Python用のプロットライブラリです。NumPyで使用でき、MatLabに代わる効果的なオープンソースを提供します。また、PyQtやwxPythonなどのグラフィックツールキットでも使用できます。