Что означает "индекс 0 выходит за границы оси 0 с размером 0"?

Я новичок в обоих питона и NumPy. Я запустил код, который я написал, и я получаю это сообщение: "Индекс 0 выходит за пределы для оси 0 с размером 0". Без контекста я просто хочу выяснить, что это значит. Возможно, глупо спрашивать это но что они имеют в виду под осью 0 и размером 0? Индекс 0 означает первое значение в массиве... но я не могу понять, что означают ось 0 и размер 0.

Спасибо! "Данные" - это текстовый файл с множеством чисел в двух столбцах.

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

4 ответа

В numpy, нумерация и индекс нумерации начинаются с 0. Итак axis 0 означает 1-е измерение. Также в numpy измерение может иметь длину (размер) 0. Простейший случай:

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

Я также понимаю, если x = np.zeros((0,5), int)2d массив с 0 строками и 5 столбцами.

Итак, где-то в вашем коде вы создаете массив с первой осью размера 0.

Когда вы спрашиваете об ошибках, ожидается, что вы сообщите нам, где произошла ошибка.

Также при отладке подобных проблем первое, что вы должны сделать, это распечатать shape (а может и dtype) подозреваемых переменных.

Это IndexErrorв python, что означает, что мы пытаемся получить доступ к индексу, которого нет в тензоре. Ниже приведен очень простой пример, чтобы понять эту ошибку.

# 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,)

с этим массивом arr на месте, если теперь мы попытаемся присвоить какое-либо значение некоторому индексу, например индексу 0 как в случае ниже

In [16]: arr[0] = 23     

Тогда мы получим IndexError, как показано ниже:


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

Причина заключается в том, что мы пытаемся получить доступ к индексу (здесь 0 -й позиции), что не существует (т.е. не существует, потому что мы имеем массив размера0).

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

Так что, по сути, такой массив бесполезен и не может быть использован для хранения чего-либо. Таким образом, в вашем коде вы должны следовать трассировке и искать место, где вы создаете массив / тензор размера0 и исправь это.

По сути это означает, что у вас нет индекса, на который вы пытаетесь сослаться. Например:

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)

выдаст мне ошибку, на которую вы ссылаетесь, потому что я не сказал Pandas, как долго мой датафрейм. Принимая во внимание, что если я делаю точно такой же код, но я назначаю длину индекса, я не получаю ошибку:

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)

Надеюсь это ответит на твой вопрос!

Я столкнулся с этой ошибкой и обнаружил, что причиной ошибки был мой тип данных. Тип был объектом, после преобразования его в int или float проблема была решена.

Я использовал следующий код:

      df = df.astype({"column": new_data_type,
                "example": float})
Другие вопросы по тегам