我是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
);
答案 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)
希望能回答你的问题!