Hallo Ich schrieb den folgenden Python-Code, der (vermeintlich) Daten aus einer FITS-Datei extrahiert.Python numpy savetxt nicht speichern: "Tupel Index außerhalb des Bereichs"
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 ist ein N x 2 Array mit den Koordinaten für das Ziel von Interesse. Jede Ziel-FITS-Datei enthält Tausende von "Ereignissen", die mit bestimmten Koordinaten und Energien verknüpft sind. Der Code durchläuft jedes Ereignis in jedem Ziel und erfasst die Energie für Ereignisse, die ein Kriterium erfüllen (der Abstand zwischen den Zielkoordinaten und den Ereigniskoordinaten muss kleiner als eine bestimmte Zahl sein), wenn er die Kriterien erfüllt, zu denen er gespeichert wird. f "das ist ein 1D-Array, eine einfache Liste von Zahlen (etwa 23000 Nummern).
Alles funktioniert, bis der savetxt Befehl und dann spuckt er den Fehler:
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
ich wissen muss, was schief läuft. Dieser Code funktionierte für ein anderes Beispiel.
Mach dir keine Sorgen über die Funktion, func(), es ist aus interp1D gebaut und funktioniert gut – theasucksatpython
Es scheint, dass 'f', die Sie speichern' savetxt' enthält nur 1 oder weniger Elemente. Die Fälle in der for-Schleife sind also nicht so oft wahr, wie sie sein sollten. Dies scheint die Zeile zu sein, in der numpy fehlschlägt: https://github.com/numpy/numpy/blob/v1.11.0/numpy/lib/npyio.py#L1118 –
Wie ist die Datenstruktur von 'f'? Nach dem von Ihnen angegebenen Code zu beurteilen, macht f = [] 'f zu einer Liste. Laut [numpy docs] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html) muss der zweite Parameter der 'np.savetxt' Funktion -' X' sein " array_like " –