对一维数组元素的迭代在几次迭代后给出索引错误
Iteration over elements of 1D array is giving index error after few iterations
我有一个包含 15 个元素的数组 'A'。我必须删除一些元素并使数组具有 8 个元素。
我必须比较相邻的元素和它们之间的差异的最小值,它应该删除第二个元素等等。迭代应继续,直到元素数变为 8。
我收到错误:IndexError:索引 13 超出轴 0 的范围,大小为 13。
这是我的代码:
A = [1, 11, 21, 105, 115, 134, 139, 149, 152, 180, 190, 195, 200, 210, 236]
k = 0
while len(A) > 8:
for i in range(len(A) - 1):
x = A[i-1]
y = A[i]
if abs(x-y) == k:
A = np.delete(A, np.argwhere(A == y))
if len(A) == 8:
print("Final A= ", A)
k = k+1
您的错误似乎在以下行:
A = np.delete(A, np.argwhere(A == y))
代码将在满足此条件后继续循环,可能会导致在 for 循环的一次迭代中多次删除。要解决这个问题,只需在此行之后添加一个 break,以打破循环并重新评估数组的大小:
if abs(x-y) == k:
A = np.delete(A, np.argwhere(A == y))
break
您可以使用单个循环迭代 len(A)-8
次,以便每次迭代删除一个元素。从移位版本中减去数组以计算连续元素之间的差异,并删除具有最小差异的正确元素。最后在循环外打印。
import numpy as np
A = np.array([1, 11, 21, 105, 115, 134, 139, 149, 152, 180, 190, 195, 200, 210, 236])
for k in range(len(A)-8):
diff = np.abs(A[1:] - A[:-1])
A = np.delete(A, np.argmin(diff)+1)
print("Final A = ", A)
给出:
Final A = [ 1 21 105 134 149 180 200 236]
我有一个包含 15 个元素的数组 'A'。我必须删除一些元素并使数组具有 8 个元素。 我必须比较相邻的元素和它们之间的差异的最小值,它应该删除第二个元素等等。迭代应继续,直到元素数变为 8。 我收到错误:IndexError:索引 13 超出轴 0 的范围,大小为 13。 这是我的代码:
A = [1, 11, 21, 105, 115, 134, 139, 149, 152, 180, 190, 195, 200, 210, 236]
k = 0
while len(A) > 8:
for i in range(len(A) - 1):
x = A[i-1]
y = A[i]
if abs(x-y) == k:
A = np.delete(A, np.argwhere(A == y))
if len(A) == 8:
print("Final A= ", A)
k = k+1
您的错误似乎在以下行:
A = np.delete(A, np.argwhere(A == y))
代码将在满足此条件后继续循环,可能会导致在 for 循环的一次迭代中多次删除。要解决这个问题,只需在此行之后添加一个 break,以打破循环并重新评估数组的大小:
if abs(x-y) == k:
A = np.delete(A, np.argwhere(A == y))
break
您可以使用单个循环迭代 len(A)-8
次,以便每次迭代删除一个元素。从移位版本中减去数组以计算连续元素之间的差异,并删除具有最小差异的正确元素。最后在循环外打印。
import numpy as np
A = np.array([1, 11, 21, 105, 115, 134, 139, 149, 152, 180, 190, 195, 200, 210, 236])
for k in range(len(A)-8):
diff = np.abs(A[1:] - A[:-1])
A = np.delete(A, np.argmin(diff)+1)
print("Final A = ", A)
给出:
Final A = [ 1 21 105 134 149 180 200 236]