我对python和numpy都是新手。我运行了我写的一个代码,我得到了这样的消息:'index 0 is out of bounds for axis 0 with size 0'在没有上下文的情况下,我只想弄清楚这是什么意思。问这个问题可能很傻,但是axis 0和size 0是什么意思?index 0表示数组中的第一个值。但是我弄不清楚axis 0和size 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条答案
按热度按时间weylhg0b1#
在
numpy
中,索引和维度编号从0开始。因此axis 0
表示第1个维度。同样,在numpy
中,维度的长度(大小)可以为0。最简单的情况是:如果
x = np.zeros((0,5), int)
,一个0行5列的二维数组,我也可以得到它。因此,在代码的某个地方,您创建了一个第一个轴的大小为0的数组。
询问错误时,您应该告诉我们错误发生的位置。
同样,在调试此类问题时,您应该做的第一件事是打印可疑变量的
shape
(可能还有dtype
)。应用于
pandas
pandas
的程式在传送Series
或DataFrame
至numpy.array
时,也会发生相同的错误,如下所示:pandas.Series.values
或pandas.Series.to_numpy()
或pandas.Series.array
pandas.DataFrame.values
或pandas.DataFrame.to_numpy()
解决错误:
1.使用
try-except
块if x.size != 0:
ppcbkaq52#
实际上,这意味着您没有要引用的索引。例如:
我会给予你提到的错误,因为我还没有告诉Pandas我的 Dataframe 有多长。然而,如果我做完全相同的代码,但我确实分配了索引长度,我不会得到错误:
希望这能回答你的问题!
jgzswidk3#
这是python中的一个
IndexError
,这意味着我们试图访问一个在Tensor中不存在的索引。下面是一个非常简单的例子来理解这个错误。有了这个数组
arr
,如果我们现在试图给某个索引赋值,例如给索引0
赋值,如下例所示然后,我们将得到一个
IndexError
,如下所示:原因是我们试图访问一个索引(这里是第0个位置),但它并不存在(即它不存在,因为我们有一个大小为
0
的数组)。因此,本质上,这样的数组是无用的,不能用来存储任何东西。因此,在代码中,你必须沿着回溯路径,寻找创建大小为
0
的数组/Tensor的位置,并修复它。6qfn3psc4#
我遇到了这个错误,发现是我的数据类型导致了错误。类型是一个对象,在将其转换为int或float后,问题就解决了。
我使用了以下代码: