Numpy の np.array を用いて行列を定義する際に,例えば 7X7 行列を np.zeros((7,7)) で作成すると,倍精度の実行列が作られてしまう.そこにcomplex型の変数を入れようとするとエラーが起こる.
1 2 3 4 5 6 7 8 9 10 | import numpy as np A = np.zeros(( 7 , 7 )) print (A[ 0 ][ 0 ]) #実行結果:0.0 print ( type (A[ 0 ][ 0 ])) #実行結果:<class 'numpy.float64'> ######## これ以上を書くとエラーが出される ###### #A[0][0] = complex(1,2) ######## エラーメッセージ ########## #TypeError: can't convert complex to float |
複素数型の行列を定義する際には,次のようにして行えばよい.
1 2 3 4 5 6 | import numpy as np A = np.zeros(( 7 , 7 ), dtype = np. complex ) A[ 0 ][ 0 ] = complex ( 1 , 2 ) print (A[ 0 ][ 0 ]) #実行結果:(1+2j) print ( type (A[ 0 ][ 0 ])) #実行結果:<class 'numpy.complex128'> |
最後で128となっているのは,4倍精度だからではなくって,複素数が実部と虚部という二つの倍精度実数を持つことに由来する.
numpy.array の使い方の”dtype”というオプションをヒントに行った.
numpy.array – Numpy 公式マニュアル
決め手の参考サイトは,こちらの stackoverflow の質問の答えの最後の方.
Assigning complex values to numpy arrays? – stackoverflow