Python 什么是';索引0超出大小为0';什么意思?

Python 什么是';索引0超出大小为0';什么意思?,python,numpy,indexing,error-handling,index-error,Python,Numpy,Indexing,Error Handling,Index Error,我对python和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

我对python和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
x=np.linspace(1735.01775.0100)
第1列=(数据[0,0:-1]+数据[0,1:])/2.0
第2列=数据[1,1:]
x_column1=np.零(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]
实验=np.类零(x)
对于范围内的i(np.尺寸(x_边)-2):

索引=np.flatnonzero(np.logical_和((column1>=x_column1[i]),(column1在
numpy
中,索引和维度编号从0开始。因此
轴0
表示第一维度。同样在
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)
,一个包含0行和5列的2d数组,我也会得到它

因此,在代码中的某个地方,您正在创建一个第一轴大小为0的数组

当询问错误时,希望您告诉我们错误发生的位置

同样,在调试此类问题时,您应该做的第一件事是打印可疑变量的
形状
(可能还有
dtype

应用于熊猫
  • 当将
    系列
    数据帧
    发送到
    numpy.array
    时,使用
    pandas的用户可能会出现相同的错误,如下所示:
    
解决错误:
  • 使用
    试除
  • 验证数组的大小不是0
    • 如果x.size!=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)
    

    希望这能回答您的问题!

    这是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     
    
    然后,我们将得到一个
    索引器
    ,如下所示:


    因此,从本质上讲,这样的数组是无用的,不能用来存储任何东西。因此,在代码中,您必须跟踪回溯,寻找创建大小为
    0
    的数组/张量的位置,并修复该问题。

    这可能与此相关。
    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
    
    In [19]: arr.size * arr.itemsize  
    Out[19]: 0