前提
N = 31848305のセルにそれぞれcxyz, velo, den, T, ZSNII, ZSNIaという情報が入っているバイナリファイルを読み込みたいと考えています。
実現したいこと
下のソースコートで現在読み込んでいますが、読み込む数が多すぎて、非常に遅いです。
読み込んだあとに、ndarrayに情報を入れ込んでいるという感じです。高速化したいのですが、他にどのような方法があるのでしょうか。また、Cの方が早いのでしょうか。
該当のソースコード
python
1#initialize: 2cell_size = np.array(1 * [0.]) 3Level_array = np.array(1 * [0.]) 4x = np.array(1 * [0.]) 5y = np.array(1 * [0.]) 6z = np.array(1 * [0.]) 7Vx = np.array(1 * [0.]) 8Vy = np.array(1 * [0.]) 9Vz = np.array(1 * [0.]) 10Den_array = np.array(1 * [0.]) 11Tem_array = np.array(1 * [0.]) 12ZSNII_array = np.array(1 * [0.]) 13ZSNIa_array = np.array(1 * [0.]) 14for i in range(0,N): 15 if(i % 1000000 == 0): 16 print("%9d/%9d" % (i, N)) 17 f.seek(i*13*4+4) 18 bytes = f.read(16) 19 cxyz = struct.unpack('>ffff', bytes) 20# 21 f.seek(i*13*4+20) 22 bytes = f.read(12) 23 velo= struct.unpack('>fff', bytes) 24# 25 f.seek(i*13*4+32) 26 bytes = f.read(4) 27 Den = struct.unpack('>f', bytes) 28# 29 f.seek(i*13*4+36) 30 bytes = f.read(4) 31 T = struct.unpack('>f', bytes) 32# 33 f.seek(i*13*4+40) 34 bytes = f.read(4) 35 ZSNII = struct.unpack('>f', bytes) 36# 37 f.seek(i*13*4+44) 38 bytes = f.read(4) 39 ZSNIa = struct.unpack('>f', bytes) 40 if j==0: 41 cell_max_reso=cxyz[0] 42 cell_size[0]= cxyz[0] 43 Level_array[0]= 1. 44 x[0] = cxyz[1] 45 y[0] = cxyz[2] 46 z[0] = cxyz[3] 47 Den_array[0]= Den[0] 48 Tem_array[0]= T[0] 49 ZSNII_array[0]=ZSNII[0] 50 ZSNIa_array[0]=ZSNIa[0] 51 else: 52 cell_size = np.append(cell_size, cxyz[0]) 53 Level_array = np.append(Level_array, np.log2(cxyz[0]/cell_max_reso) ) 54 x = np.append(x, cxyz[1] ) 55 y = np.append(y, cxyz[2] ) 56 z = np.append(z, cxyz[3] ) 57 Den_array = np.append(Den_array, Den[0]) 58 Tem_array = np.append(Tem_array, T[0]) 59 ZSNII_array = np.append(ZSNII_array, ZSNII[0] ) 60 ZSNIa_array = np.append(ZSNIa_array, ZSNIa[0] )
補足情報(FW/ツールのバージョンなど)
macbook pro, Monterey, python3.8
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/24 03:06
2022/03/24 04:14 編集
2022/03/24 04:30
2022/03/24 05:09
2022/03/24 05:16
2022/03/24 05:16
2022/03/24 05:19
2022/03/24 06:02