web-dev-qa-db-fra.com

Que signifie «l'indice 0 est hors limites pour l'axe 0 avec une taille 0»?

Je suis nouveau dans les deux python et numpy. J'ai exécuté un code que j'ai écrit et je reçois ce message: 'l'index 0 est hors limites pour l'axe 0 avec la taille 0' Sans le contexte, Je veux juste comprendre ce que cela signifie .. Il pourrait être stupide de demander cela, mais que signifient-ils par l'axe 0 et la taille 0? Index 0 signifie la première valeur du tableau .. mais je ne peux pas comprendre quel axe 0 et taille 0 signifient.

Les "données" sont un fichier texte avec beaucoup de nombres dans deux colonnes.

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
7
Seoyeon Hong

Dans numpy, la numérotation des index et des dimensions commence par 0. Ainsi axis 0 Signifie la 1ère dimension. Toujours dans numpy une dimension peut avoir une longueur (taille) 0. Le cas le plus simple est:

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

Je l'obtiens également si x = np.zeros((0,5), int), un tableau 2d avec 0 lignes et 5 colonnes.

Donc, quelque part dans votre code, vous créez un tableau avec un premier axe de taille 0.

Lorsque vous posez des questions sur les erreurs, vous devez nous indiquer où l'erreur se produit.

De plus, lors du débogage de problèmes comme celui-ci, la première chose à faire est d'imprimer le shape (et peut-être le dtype) des variables suspectées.

10
hpaulj

Cela signifie essentiellement que vous n'avez pas l'index que vous essayez de référencer. Par exemple:

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)

me donnera l'erreur à laquelle vous faites référence, car je n'ai pas dit Pandas combien de temps ma trame de données est. Alors que si je fais exactement le même code mais que j'attribue une longueur d'index, je ne ne reçois pas d'erreur:

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)

J'espère que cela répond à votre question!

2
Daniel Abud