以下のようなコードがあります
python
1import numpy as np 2region = 3 3cov = np.zeros((region, 2, 2)) 4 5sdata=["[[[ 7.00577894e-01 -4.53771106e-03]", 6 "[ -4.53771106e-03 1.49317405e-02]]", 7 "[[ 1.83195528e-01 -4.58710744e-02]", 8 "[ -4.58710744e-02 1.15339553e-02]]", 9 "[[ 2.78122517e+00 3.87381289e+00]", 10 "[ 3.87381289e+00 5.39580071e+00]]]"]
これを以下のようにしたいです
python
1cov = array([[[ 7.00577894e-01 -4.53771106e-03], 2 [ -4.53771106e-03 1.49317405e-02]], 3 [[ 1.83195528e-01 -4.58710744e-02], 4 [ -4.58710744e-02 1.15339553e-02]], 5 [[ 2.78122517e+00 3.87381289e+00], 6 [ 3.87381289e+00 5.39580071e+00]]])
自分でやってみたのですが、このようなエラーがでます
python
1for k in range(region): 2 for j in range(2): 3 for i in range(2): 4 cov[k][j][i] = np.array(ast.literal(sdata[i])) 5 6---------------------------------------------------- 7実行結果 8File "<unknown>", line1 97.00577894e-01 -4.53771106e-03 10^ 11IndentationError unexpected indent
おそらく、もともとのsdataの入力に空白?が含まれたりすることによって
おきているのかなと思って
stripを用いたりしたのですが、
valueerror malformed node or string
このようになります
splitを用いるとlistになってしまって、実行できません
どうしたらよいでしょうか
https://teratail.com/questions/84684 から何か得られるものはなかったでしょうか?
ast.literal_evalを利用しようと頑張っているのですが、思うようにいきません
一応できたので回答をのせますが、for文が多すぎるのでもっとスマートな形があれば教えてください
すみません、『文字列をリストにしたい』とのことですが、そもそもこの文字列は何ですか?もし、他のプログラムで保存するものなのだとしたら... np.saveとnp.loadとで一発で読み書き出来ますよ。
文字列という言い方は適切でないかもしれません。sdataのことなので、リストですね。ただ文字列のリストになっているので、求めるもののようなfloat *のリストにしたいです
回答2件
あなたの回答
tips
プレビュー