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 numpy
begint de index- en dimensienummering met 0. Dus axis 0
betekent de eerste dimensie. Ook in numpy
kan 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
- Dezelfde fout kan optreden voor degenen die
pandas
gebruiken, bij het verzenden van eenSeries
ofDataFrame
naar eennumpy.array
, zoals bij het volgende:
De fout oplossen:
- Gebruik een
try-except
-blok - 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 IndexError
in 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 arr
op zijn plaats, als we nu proberen een waarde toe te kennen aan een index, bijvoorbeeld aan de index 0
zoals 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 0
maakt en dat oplossen.