簡體   English   中英

索引超出范圍錯誤:Python

[英]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)):

首先是一些基礎知識

  1. Python是“零索引”的,這意味着列表中的第一個元素被索引為0
  2. 范圍為: [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)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM