Numpy & Scipy - 1.1 行列とベクトルの表記法、行列の入出力
Numpy & Scipy - 1.1 行列とベクトルの表記法、行列の入出力
Numpy & Scipy シリーズ (1 / 9)
- Numpy & Scipy - 1.1 行列とベクトルの表記法、行列の入出力
- Numpy & Scipy - 1.2 行列の便利な関数
- Numpy & Scipy - 1.3 行列の基本操作 (1)
- Numpy & Scipy - 1.4 行列の基本操作 (2)
- Numpy & Scipy - 1.5 行列の基本操作 (3)
- Numpy & Scipy - 1.6 The Solution of Matrix Equation (General Matrices)
- Numpy & Scipy - 1.7 The Solution of Band Matrix
- Numpy & Scipy - 1.8 The Solution of Toeplitz Matrix and Circulant Matrix And How to Solve AX=B
- Numpy & Scipy - 1.9 Calculate Eigenvector and Eigenvalue of Matrix
Numpy の特徴
- 数学、科学計算のためのライブラリです。行列および配列を処理したり演算します。
random.randで乱数を生成できます。
行列生成
1 2 3 4 5 6 import numpy as np # numpyパッケージをロードしてnpという名前で使用 a = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.float64) # 2次元行列生成 b = np.array([1,2,3]) # 1次元行列生成 print(a) print(b)
1 2 3 4 5[[ 1. 2.5 3. ] [-1. -2. -1.5] [ 4. 5.5 6. ]] [7 5 3]
shape method
- $n imes n$ 行列を (rows, columns) 形式のタプルデータ型で返します。
1 2 print(a.shape) # タプルデータ型で返却 print(b.shape) # (3,) と出る。1次元ベクトルと考えれば良い。
1 2(3, 3) (3,)
complex matrix
1 2 3 4 5 c = np.array([[1 - 2j , 3 + 1j, 1], [1+2j, 2-1j, 7]]) ## jの前には必ず数字が来なければならない。 d = np.array([1+8j, -2j]) print(c) print(d)
1 2 3 4[[1.-2.j 3.+1.j 1.+0.j] [1.+2.j 2.-1.j 7.+0.j]] [ 1.+8.j -0.-2.j]
Data Type : dtype
通常numpyでは実数部分は
np.float64、虚数部分はnp.complex128のデータタイプを使用します。実数行列
aに虚数を代入するとエラー発生
1 a[1,1] = 0 + 2j
1TypeError: can't convert complex to float
- したがって明示的に array を作る時に
dtypeを決めましょう。 - そして complex type で生成すれば実数、虚数両方使用可能です。
1 2 a = np.array([[1, 2.5, 3], [-1, -2, -1.5], [4, 5.5, 6]], dtype=np.float64) ## dtypeがdefault引数で省略されていたため a = np.array([[1, 2.5, 3], [-1, -2, -1.5], [4, 5.5, 6]], dtype=np.complex128) ## 最初からcomplexタイプにすれば実数、虚数両方使用可能
1 2 3 4 5 # 明示的タイプキャスト a.astype(dtype=np.complex128) # 暗黙的タイプキャスト a = a + b # a:complex, b:float -> a:complex
ファイル(.txt) 読み込み
# "Save/input1.txt" 内容 1.0 2.5 3.0 -1.0 -2.0 -1.5 4.0 5.0 6.0 # "Save/input2.txt" # complex 数式は括弧の中に入れて処理する。 (1-2j) (3+j) (1) (1+2j) (2-j) 7
1 2 3 4 5 6 7 8 9 a = np.genfromtxt("Save/input1.txt", delimiter=" ", dtype=np.float64) # path, 区切り文字(空白, "," ...) , データタイプ print(a) print(a.shape) b = np.genfromtxt("Save/input2.txt", delimeter=" ", dtype=np.complex128) print(b) print(b.shape)
1 2 3 4 5 6 7 8 9 10 11[[ 1. 2.5 3. ] [-1. -2. -1.5] [ 4. 5. 6. ]] (3, 3) [[1.-2.j 3.+1.j 1.+0.j] [1.+2.j 2.-1.j 7.+0.j]] (2, 3)
ファイル(.txt) 保存
- floating フォーマット
123.4567 => “%0.4f”
- scientific フォーマット
1.23e2 => “%0.2e”
1 2 3 4 5 6 7 d = np.genfromtxt("Save/input2.txt", delimiter=" ", dtype=np.complex128) np.savetxt("Save/output.txt", d , fmt="%0.4e", delimiter="," ) # 保存するパス, 保存する行列, フォーマット, 区切り文字の順序である。 d = np.genfromtxt("Save/output.txt" , delimiter=",", dtype=np.complex128) print(d)
1 2[[1.-2.j 3.+1.j 1.+0.j] [1.+2.j 2.-1.j 7.+0.j]]
この記事は著者の CC BY 4.0 ライセンスの下で提供されています。
