67753


下記のようなコードで関数 `pc.pcoef`
で行列計算をして返ってきたベクトルを配列で表示したいのですが、うまくいきません。どなたか解決法をご教授ください。よろしくお願いいたします。

[code]

    for k in range(8):
            for i in range(6):
                z0    = 0                                    # L.E. camber line location
                zr    = 0.1+0.2*new_population[k,0]          # location of camber crest(y)
                z1    = -0.3*new_population[k,1]             # location of camber T.E.(y)
                dz0   = 2*new_population[k,2]                # slope of L.E.
                dz1   = -0.5-1.5*new_population[k,3]         # slope of T.E.
                dzr   = 0                                    # slope of crest
    
                cm_coef=pc.pcoef(x0,xr,x1,z0,zr,z1,dz0,dz1,dzr)
                zsft[k]=zr+zt/2
        for k in range(8):
            for i in range(6):
                print(cm_coef[k,i])
    
[/code]

実行結果は以下の通りです。

[code]

    print(cm_coef[k,i])
     TypeError: list indices must be integers or slices, not tuple
    
[/code]

この部分の後でcm_coefを使って5次の関数を作りたいのですが、タプルだとうまくいかないのでしょうか？

追記です。最初のiのループはいらないようです。  
さらにprint(cm_coef)の結果を載せます。  
なんかわかりそうな気がします。

[code]

    [[ 0.        ]
     [ 0.8689419 ]
     [-2.6802233 ]
     [ 3.34391096]
     [-1.01442115]
     [-0.60621196]]
    [[ 0.        ]
     [ 0.30732422]
     [ 2.0012324 ]
     [-3.92897529]
     [ 1.03923625]
     [ 0.37938151]]
    [[ 0.        ]
     [ 1.49308562]
     [-4.07762968]
     [ 5.43484588]
     [-3.10940638]
     [ 0.20196107]]
    [[  0.        ]
     [  1.88226751]
     [ -9.13169862]
     [ 20.9972712 ]
     [-22.02983331]
     [  8.05246197]]
    [[ 0.        ]
     [ 0.82515095]
     [-1.64132387]
     [ 4.19406298]
     [-6.31678378]
     [ 2.65285626]]
    [[ 0.        ]
     [ 1.66204428]
     [-5.12235318]
     [ 9.30373519]
     [-8.80369057]
     [ 2.82992897]]
    [[ 0.        ]
     [ 0.99575797]
     [-3.21823631]
     [ 4.6837967 ]
     [-2.69326248]
     [ 0.18003859]]
    [[ 0.        ]
     [ 1.04588867]
     [-1.33639327]
     [ 2.67285108]
     [-5.13182913]
     [ 2.72569873]]
    
[/code]

cm_coefの定義は以下の通りです。

[code]

    cm_coef=np.zeros((6,8), dtype=np.float64)
    
[/code]

このようにして下記 `cm_coef[k][i]` に設定するとエラーが出ます。  
まだデバッグが必要のようです。

[code]

    ValueError: setting an array element with a sequence.
    
[/code]


CC BY-SA 4.0
2020-06-16T08:47:55.330
67719
2020-06-17T06:59:13.337
2020-06-17T06:59:13.337
38331
38331
question
python python3 numpy array
Pythonで関数の戻り値（行列計算のベクトル）を配列で表したい


ソースコードのインデントが崩れていたりお使いの変数の定義が分からなかったりするので正確なところは言えませんが、少なくとも今出ているエラーは
`cm_coef[k, i]` ではなく `cm_coef[k][i]` と書くことで直せます。普通の Python
の多次元配列には後者のようにして添え字を指定してください。前者のような書き方をするのは NumPy array などライブラリのものです。

コメントでは更に `cm_coef[k][i]` と書くと `IndexError: index 1 is out of bounds for axis 0
with size 1` エラーが出たと書かれていますが、これはエラーメッセージに書かれている通り添え字が out of bounds
したことによるエラーです。つまり `cm_coef[k]` の長さ以上の添え字が指定されてしまっています。もし `cm_coef[k][1]`
が存在するはずなのであれば `cm_coef` の定義にバグがあるので確認してください。


CC BY-SA 4.0
2020-06-16T14:05:12.250
67728
2020-06-16T14:05:12.250
19110
67719
answer


下記のようにして自己解決しました。

[code]

    for k in range(8):
    　　　　co=coef.reshape([6])
          　for i in range(6):
                    cm_coef[k][i]=co[i]
    
    
[/code]


CC BY-SA 4.0
2020-06-17T06:58:23.687
67753
2020-06-17T06:58:23.687
38331
67719
answer