[英]Index out of bounds error : Python
我有一组不平滑的数据。 因此,我试图用生成的网格对其进行插值。
import numpy as np
data=np.loadtxt('test.txt')
x=data[:,0] #len(x) = 730
y=data[:,1]
Nx= len(x)
Ny=len(y)
del_x= 0.5
xn = np.linspace(0,Nx,2000)
yn = np.linspace(0,Ny,2000)
#loop
for i in range(0,Nx-1):
if x[i] > xn[i] and x[i] < xn[i+1]:
new_x= (i + (xn[i] - x[i])/(xn[i]-xn[i+1]))*del_x
print new_x
我想执行基本执行该操作的循环,即:如果我的原始数据x [i]在两个网格点xn [i],xn [i + 1]之间,则计算new_x。
但我收到以下错误
Traceback (most recent call last):
File "new.py", line 27, in <module>
if x[i] > xn[i] and x[i] < xn[i+1]:
IndexError: index out of bound
有人可以帮我吗 ?
如果len(x) = 730
,则对于循环而言太短。 您的循环迭代了1000
次,在某个点上i
会大于730
,并且没有x[730]
, x[731]
等值。由于访问的是数组中不存在的值,因此会出现错误错误。
您可以这样更改for循环:
for i in range(0, len(x)):
0
。 [start, stop[
,表示不包括最后一个元素。 请尝试以下操作,看看会发生什么:
a = [1, 2, 3]
print("a has %d elements:" %(len(a)))
for i in range(len(a)):
print("a[%d] = %d" %(i, a[i]))
输出为:
a has 3 elements:
a[0] = 1
a[1] = 2
a[2] = 3
如果您尝试访问a[3]
,则会看到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Numpy“ linspace”接受以下输入: numpy.linspace(start, stop, N)
,导致具有N
元素的封闭范围[start, stop]
(注意它包括“ stop”)。
你想要的元素个数,或len(xn)
为730,和我猜测你想要的“停止”值是max(x)
xn = numpy.linspace(0, max(x), len(x))
for i in range(len(x)):
...
提示:如果不确定函数的签名,可以随时寻求
help
,请尝试:help(numpy.linspace)
xn = np.linspace(0,Nx,2000)
其中0
是开始值, Nx
是结束值, 2000
是要生成的值数。
linspace返回的对象类似于:
[0, 0.5, 1, ... , ] #2000 elements
即包含2000个元素的行
x=data[:,0]
x类似于:
[[1],[2],[3],[4], .... ,[]] #column vector with number of elements in text data
现在x的行大小不能大于1
即索引必须小于1
或等于0
而且你不能比较这两个数组
[ ... ]
和[[], [], [], [], ... ]
是无与伦比的(尽管您可以比较第一个元素。)
您可以使用此: 重塑
请参阅此答案: -1在numpy重塑中是什么意思?
row_x = x.reshape(-1)
将为您提供行向量。
您可以通过以下方式将其转换为列格式:
col_x = row_x.reshape(-1,1)
由于我目前正在工作,因此我很感激,因此急着写了答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.