Wat betekent ‘index 0 is buiten de grenzen voor as 0 met grootte 0’?

Ik ben nieuw voor zowel python als numpy.
Ik heb een code uitgevoerd die ik heb geschreven en ik krijg deze melding:
‘index 0 is buiten de grenzen voor as 0 met grootte 0’
Zonder de context wil ik gewoon uitzoeken wat dit betekent. Het is misschien dom om dit te vragen, maar wat bedoelen ze met as 0 en grootte 0? index 0 betekent de eerste waarde in de array .. maar ik kan niet achterhalen wat as 0 en grootte 0 betekenen.

De ‘data’ is een tekstbestand met veel cijfers in twee kolommen.

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

Antwoord 1, autoriteit 100%

In numpybegint de index- en dimensienummering met 0. Dus axis 0betekent de eerste dimensie. Ook in numpykan een afmeting lengte (maat) 0 hebben. Het eenvoudigste geval is:

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

Ik krijg het ook als x = np.zeros((0,5), int), een 2d array met 0 rijen en 5 kolommen.

Dus ergens in je code maak je een array met een eerste as van grootte 0.

Als u naar fouten vraagt, wordt van u verwacht dat u ons vertelt waar de fout optreedt.

Ook bij het debuggen van dit soort problemen, moet u eerst de shape(en misschien de dtype) van de verdachte variabelen afdrukken.

Toegepast op pandas

De fout oplossen:

  1. Gebruik een try-except-blok
  2. Controleer of de grootte van de array niet 0 . is
    • if x.size != 0:

Antwoord 2, autoriteit 20%

In wezen betekent dit dat u de index waarnaar u probeert te verwijzen niet heeft. Bijvoorbeeld:

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)

zal me de fout geven waarnaar u verwijst, omdat ik Pandas niet heb verteld hoe lang mijn dataframe is. Terwijl als ik exact dezelfde code doe, maar ik WEL een indexlengte toewijs, ik geen foutmelding krijg:

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)

Ik hoop dat dit je vraag beantwoordt!


Antwoord 3, autoriteit 12%

Dit is een IndexErrorin python, wat betekent dat we proberen toegang te krijgen tot een index die niet in de tensor zit. Hieronder is een heel eenvoudig voorbeeld om deze fout te begrijpen.

# create an empty array of dimension `0`
In [14]: arr = np.array([], dtype=np.int64) 
# check its shape      
In [15]: arr.shape  
Out[15]: (0,)

met deze array arrop zijn plaats, als we nu proberen een waarde toe te kennen aan een index, bijvoorbeeld aan de index 0zoals in het onderstaande geval

In [16]: arr[0] = 23     

Dan krijgen we een IndexError, zoals hieronder:


IndexError                                Traceback (most recent call last)
<ipython-input-16-0891244a3c59> in <module>
----> 1 arr[0] = 23
IndexError: index 0 is out of bounds for axis 0 with size 0

De reden is dat we proberen toegang te krijgen tot een index (hier op de 0depositie), die er niet is (dwz het bestaat niet omdat we een array van grootte hebben 0).

In [19]: arr.size * arr.itemsize  
Out[19]: 0

Dus in wezen is zo’n array nutteloos en kan niet worden gebruikt om iets op te slaan. Dus in je code moet je de traceback volgen en zoeken naar de plaats waar je een array/tensor van de grootte 0maakt en dat oplossen.

Other episodes