私は以下の行列を持っています。Pythonで行列のパワー演算を行う
m =
0 0 0 0
0 1 2 3
0 2 4 6
0 3 6 9
私は、Pythonを使用して同等のMATLAB操作を実行しようとしています。
new_m = w.^m
すなわちfollwing行列にメートルを変換:
new_m =
1 1 1 1
1 w^1 w^2 w^3
1 w^2 w^4 w^6
1 w^3 w^6 w^9
は、現在、私のPythonのアプローチは以下の通りです:
[ [ 1.0000e+00+0.j 1.0000e+00+0.j 1.0000e+00+0.j 1.0000e+00+0.j]
[ 1.0000e+00+0.j 5.3549e+02+0.j 2.8675e+05+0.j 1.5355e+08+0.j]
[ 1.0000e+00+0.j 2.8675e+05+0.j 8.2226e+10+0.j 2.3579e+16+0.j]
[ 1.0000e+00+0.j 1.5355e+08+0.j 2.3579e+16+0.j 3.6205e+24+0.j]]
:
N=4
w=cmath.exp(2*pi) # Here w = 535.491655525+0j
row=list(range(N)) # In this case row = [0, 1, 2, 3]
#Create the matrix and perform operation on it
m = [[0]*N for i in range(N)]
for x in range(1,q):
for entry in row:
m[x][entry]=entry*r # <--- This gives me give me the above matrix m
# This was my attempt to perform the new_m=w.^m operation
for x in range(0,q):
for entry in row:
element=M[x][entry]
new_m[x][entry]=w**element # <--- This should give me the correct new_m matrix described above
私のPythonコードは私に次のような結果になります
しかし、私はF私はそれが私にnew_m = w.^m
操作のため、この答えを与えるMATLABでこの操作を実行します。
new_m =
1.0e+24 *
0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 3.6205
これらの答えは異なり、どこで、私は私が私のPythonコードに誤りであることを想定しています何でウォンをつもりですなぜ私はわかりませんよ。 アドバイスやご提案をいただければ幸いです!
注
new_m = w**m
しかし、それはエラー生成:
TypeError: unsupported operand type(s) for ** or pow(): 'complex' and 'list'
まず、Pythonでatrixの作業をしている場合は、langaugeの仕組みを理解するだけで、Numpyを使用してください。http://www.numpy.org/ - この種の操作のサポートは、 Numpy Arraysを使用したボックスで、外部のPython forループで実行された操作と同じ操作より約10000倍も速くなります。 – jsbueno