'索引0超出轴0的大小为0'是什么意思?

时间:2017-01-05 18:37:18

标签: python numpy indexing error-handling index-error

我是python和numpy的新手。 我运行了一个我写的代码,我收到了这条消息: '索引0超出轴0的大小为0' 如果没有上下文,我只想弄清楚这意味着什么......问这个可能是愚蠢的,但它们对于0轴和0号是什么意思? index 0表示数组中的第一个值..但我无法弄清楚0和0的意思。

'data'是一个文本文件,其中包含两列中的大量数字。

CREATE SEQUENCE car_id_seq START WITH 100;
CREATE TABLE car (
  id      INTEGER  DEFAULT nextval('car_id_seq')  PRIMARY KEY,
  name    VARCHAR  NOT NULL  UNIQUE,
  content  VARCHAR  NOT NULL
);

3 个答案:

答案 0 :(得分:9)

numpy中,索引和维度编号从0开始。因此axis 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列的二维数组,我也会得到它。

因此,您的代码中的某个位置正在创建一个第一轴大小为​​0的数组。

在询问错误时,您应该告诉我们错误发生的位置。

同样在调试这样的问题时,首先应该打印shape(可能是dtype)可疑变量。

答案 1 :(得分:3)

这是python中的IndexError,这意味着我们正在尝试访问张量中不存在的索引。下面是一个非常简单的示例来了解此错误。

# 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 th 位置)(即,因为我们有一个大小为{{1 }}。

0

因此,从本质上讲,这样的数组是无用的,不能用于存储任何东西。因此,在代码中,您必须遵循追溯并寻找创建大小为In [19]: arr.size * arr.itemsize Out[19]: 0 的数组/张量的位置并进行修复。

答案 2 :(得分:2)

基本上它意味着你没有你想要引用的索引。例如:

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)

希望能回答你的问题!