こんにちは私はFITSファイルから(おそらくは)データを抽出する次のPythonコードを書いています。Python numpy savetxtは保存しません: "タプルのインデックスが範囲外です"
target_array=np.loadtxt(target_list)
N=len(target_array)
target=['target_{0}.fits'.format(i) for i in range(1,N+1,1)]
hdu=[]
hdudata=[]
for i in range(N):
hdu.append(pyfits.open(target[i]))
hdudata.append(hdu[i][1].data)
f=[]
for i in range(N):
for j in range(len(hdudata[i])):
if dist(target_array[i][0],hdudata[i][j]['Ra'],target_array[i][1],hdudata[i][j]['Dec']) <= func(hdudata[i][j]['Energy']):
f.append(hdudata[i][j]['Energy'])
print "Target", i, "successfully stacked"
np.savetxt('energy_stack.txt',f)
target_arrayは、対象のターゲットの座標を含むN×2の配列です。各ターゲットFITSファイルには、特定の座標とエネルギーにリンクされた何千もの「イベント」が含まれています。コードは、各ターゲット内の各イベントを循環し、基準に合致するイベントのエネルギーを取り込みます(ターゲット座標とイベント座標の距離は、指定された数より少なくなければなりません) f "は1D配列で、数字の単純なリスト(約23000の数字)です。
すべてがsavetxtコマンドまで動作し、それがエラーを吐く:
Traceback (most recent call last):
File "pipe_stack.py", line 184, in <module>
get_target_energy('target_list_reduced.txt')
File "pipe_stack.py", line 132, in get_target_energy
np.savetxt('energy_stack.txt',f)
File "/home/heatdeath/fermi_science/ScienceTools-v10r0p5-fssc-20150518A-source/external/x86_64-unknown-linux-gnu-libc2.19-0/lib/python2.7/site-packages/numpy/lib/npyio.py", line 1118, in savetxt
ncol = X.shape[1]
IndexError: tuple index out of range
私が間違って何が起こっているかを知る必要があります。このコードは別のサンプルで動作しました。 savetxt
あなたf
(X
と呼ばれる)を行い
関数func()を心配しないでください。interp1Dから構築され、うまく動作します。 – theasucksatpython
'savetxt'に保存している' f'は1つ以下の項目しか含んでいないようです。したがって、forループのifの場合は、そうでなければならないほど頻繁に真ではありません。これはnumpyが失敗する行のようです:https://github.com/numpy/numpy/blob/v1.11.0/numpy/lib/npyio.py#L1118 –
'f'のデータ構造は何ですか?あなたが 'f = []'と指定したコードから判断すると、fがリストになります。 [numpy docs](https://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html)によると、 'np.savetxt'関数の第2引数 - ' X'は " array_like " –