実現したいこと
n=4.txtは以下のようなファイルです。
0 0 1 6 0 1 1 2 0 1 2 5
n=5.txtは以下のようなファイルです。
1 1 0 13 1 1 2 8
各塊は、
x座標
y座標
z座標
値
の順番に並んでいます。「該当のソースコード1」は問題なく回ります。
今、仮に各塊が
y座標
z座標
x座標
値
の順番に並んでいる場合、「該当のソースコード1」の16~18行目を
i = int(blk[1]) j = int(blk[2]) k = int(blk[0])
に直し、
31~33行目を
pages= nx[1] rows = nx[2] cols = nx[0]
に直しただけではうまく回りませんでした(該当のソースコード2)。どなたか該当のソースコード2の間違いを正してください。
なお、各塊が
y座標
z座標
x座標
値
の順番に並んでいる場合は、n=4.txtは以下のように修正して、n=42.txtとしています。
0 1 0 6 1 1 0 2 1 2 0 5
同様にn=5.txtは以下のように修正して、n=52.txtとしています。
1 0 1 13 1 2 1 8
該当のソースコード1、該当のソースコード2でAの要素値を表示したとき、表示される要素の順番が違うと思います。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "〇〇〇l\testCV635teratailFail.py", line 37, in <module> A = getA() File "〇〇〇\testCV635teratailFail.py", line 20, in getA dr[i][j][k]= blk[3] ~~^^^ IndexError: index 2 is out of bounds for axis 0 with size 2
該当のソースコード1(エラーなく回ります)
python
1import numpy as np 2import pandas as pd 3from glob import glob 4 5nx = [0 for i in range(3)] 6 7def getA(): 8 for f in data_files: 9 # 4行ごとに読み込み(空行はスキップされる) 10 blks = [blk.to_numpy() for blk in pd.read_csv(f, header=None, chunksize=4)] 11 12 for l, blk in enumerate(blks): 13 # 2番目以降のブロックでは空行を入れる 14 if l > 0: print('') 15 16 i = int(blk[0]) 17 j = int(blk[1]) 18 k = int(blk[2]) 19 20 dr[i][j][k]= blk[3] 21 A = dr.flatten() 22 23 return A 24 25data_files = glob('n=*.txt') 26 27nx[0] = 2 28nx[1] = 2 29nx[2] = 3 30 31pages= nx[0] 32rows = nx[1] 33cols = nx[2] 34dr = np.arange(pages*rows*cols,dtype=np.float32).reshape(pages,rows,cols) 35dr[...] = 0 36 37A = getA() 38print(A) #[ 0. 6. 0. 0. 2. 5. 0. 0. 0. 13. 0. 8.] 39 40filenamecsv = 'A.csv' 41np.savetxt(filenamecsv, A, delimiter=",")
該当のソースコード2( 発生している問題・エラーメッセージが表示されます)
python
1import numpy as np 2import pandas as pd 3from glob import glob 4 5nx = [0 for i in range(3)] 6 7def getA(): 8 for f in data_files: 9 # 4行ごとに読み込み(空行はスキップされる) 10 blks = [blk.to_numpy() for blk in pd.read_csv(f, header=None, chunksize=4)] 11 12 for l, blk in enumerate(blks): 13 # 2番目以降のブロックでは空行を入れる 14 if l > 0: print('') 15 16 i = int(blk[1]) #####ここが違う 17 j = int(blk[2]) #####ここが違う 18 k = int(blk[0]) #####ここが違う 19 20 dr[i][j][k]= blk[3] 21 22 A = dr.flatten() 23 24 return A 25 26data_files = glob('n=*.txt') 27 28nx[0] = 2 29nx[1] = 2 30nx[2] = 3 31 32pages= nx[1] #####ここが違う 33rows = nx[2] #####ここが違う 34cols = nx[0] #####ここが違う 35dr = np.arange(pages*rows*cols,dtype=np.float32).reshape(pages,rows,cols) 36dr[...] = 0 37 38A = getA() 39print(A) 40 41filenamecsv = 'A.csv' 42np.savetxt(filenamecsv, A, delimiter=",")
試したこと
IndexErrorなので、31~33行目の
pages= nx[1] rows = nx[2] cols = nx[0]
が間違っているとは思うのですが、16~18行目を
i = int(blk[0]) j = int(blk[1]) k = int(blk[2])
から
i = int(blk[1]) j = int(blk[2]) k = int(blk[0])
に直しているので、31~33行目も
pages= nx[1] rows = nx[2] cols = nx[0]
に直すのではないかと思っているのですが、よく分かりませんでした。

回答2件
あなたの回答
tips
プレビュー