代码之家  ›  专栏  ›  技术社区  ›  Mohona

对一维数组元素的迭代在几次迭代后给出了索引错误

  •  0
  • Mohona  · 技术社区  · 2 年前

    我有一个由15个元素组成的数组'A'。我必须删除一些元素,并用8个元素组成数组。 我必须比较相邻的元素,为了得到它们之间差异的最小值,它应该删除第二个元素,依此类推。迭代应继续,直到元素数变为8。 我得到了一个错误: 索引器:索引13超出大小为13的轴0的界限 . 这是我的代码:

    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
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   JensenMcKenzie    2 年前

    您的错误似乎在以下方面:

    A = np.delete(A, np.argwhere(A == y))
    

    满足此条件后,代码将继续循环,这可能会在for循环的一次迭代中导致多次删除。要解决这个问题,只需在这一行之后添加一个中断,以中断循环并重新评估阵列的大小:

    if abs(x-y) == k:
          A = np.delete(A, np.argwhere(A == y))
          break
    
        2
  •  0
  •   AboAmmar    2 年前

    可以使用单循环迭代 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]