web-dev-qa-db-de.com

Was bedeutet 'Index außerhalb der Grenzen für Achse mit der Größe 0'

Ich bin sowohl für Python als auch für Numpy neu. Ich habe einen Code ausgeführt, den ich geschrieben habe, und diese Meldung wird angezeigt: 'Index 0 ist für Achse 0 mit der Größe 0' außerhalb der Grenzen. 'Ohne Kontext möchte ich nur herausfinden, was dies bedeutet aber was bedeuten sie mit Achse 0 und Größe 0? Index 0 bedeutet den ersten Wert im Array .. aber ich kann nicht herausfinden, was Achse 0 und Größe 0 bedeuten.

Die 'Daten' sind eine Textdatei mit vielen Zahlen in zwei Spalten.

x = np.linspace(1735.0,1775.0,100)
column1 = (data[0,0:-1]+data[0,1:])/2.0
column2 = data[1,1:]
x_column1 = np.zeros(x.size+2)
x_column1[1:-1] = x
x_column1[0] = x[0]+x[0]-x[1]
x_column1[-1] = x[-1]+x[-1]-x[-2]
experiment = np.zeros_like(x)
for i in range(np.size(x_edges)-2):
    indexes = np.flatnonzero(np.logical_and((column1>=x_column1[i]),(column1<x_column1[i+1])))
    temp_column2 = column2[indexes]
    temp_column2[0] -= column2[indexes[0]]*(x_column1[i]-column1[indexes[0]-1])/(column1[indexes[0]]-column1[indexes[0]-1])
    temp_column2[-1] -= column2[indexes[-1]]*(column1[indexes[-1]+1]-x_column1[i+1])/(column1[indexes[-1]+1]-column1[indexes[-1]])
    experiment[i] = np.sum(temp_column2)   
return experiment
2
Seoyeon Hong

In numpy beginnt die Index- und Dimensionsnummerierung mit 0. Daher bedeutet axis 0 die 1. Dimension. In numpy kann eine Dimension auch Länge (Größe) 0 haben. Der einfachste Fall ist:

In [435]: x = np.zeros((0,), int)
In [436]: x
Out[436]: array([], dtype=int32)
In [437]: x[0]
...
IndexError: index 0 is out of bounds for axis 0 with size 0

Ich bekomme es auch, wenn x = np.zeros((0,5), int), ein 2d-Array mit 0 Zeilen und 5 Spalten.

Sie erstellen also irgendwo in Ihrem Code ein Array mit der ersten Achse der Größe 0.

Wenn Sie nach Fehlern fragen, wird erwartet, dass Sie uns sagen, wo der Fehler auftritt.

Beim Debuggen von Problemen wie diesem sollten Sie als Erstes die shape (und möglicherweise die dtype) der verdächtigen Variablen drucken.

7
hpaulj

Im Wesentlichen bedeutet dies, dass Sie nicht über den Index verfügen, auf den Sie verweisen möchten. Zum Beispiel:

df = pd.DataFrame()
df['this']=np.nan
df['my']=np.nan
df['data']=np.nan
df['data'][0]=5 #I haven't yet assigned how long df[data] should be!
print(df)

gibt mir den Fehler, auf den Sie sich beziehen, weil ich Pandas nicht mitgeteilt habe, wie lange mein Datenrahmen ist. Wenn ich zwar genau den gleichen Code mache, aber eine Indexlänge zuweise, erhalte ich keine Fehlermeldung:

df = pd.DataFrame(index=[0,1,2,3,4])
df['this']=np.nan
df['is']=np.nan
df['my']=np.nan
df['data']=np.nan
df['data'][0]=5 #since I've properly labelled my index, I don't run into this problem!
print(df)

Hoffe das beantwortet deine Frage!

0
Daniel Abud