[Python] How to remove duplicate elements for two numpy arrays

Discussão em 'Python' iniciado por Stack, Setembro 5, 2025.

  1. Stack

    Stack Membro Participativo

    I have two arrays named u, v, e.g.

    u = np.array([1.0,2.0,2.0,3.0,4.0])
    v = np.array([10.0,21.0,18.0,30.0,40.0])
    a = np.array([100.0,210.0,220.0,300.0,400.0])


    If two elements in u are same, then delete that one which is higher in v value. For the above example, the result should be

    u_new = np.array([1.0,2.0,3.0,4.0])
    v_new = np.array([10.0,18.0,30.0,40.0])
    a_new = np.array([100.0,220.0,300.0,400.0])

    def remove_duplicates(u,v,a):
    u_new, indices = np.unique(u, return_index=True)
    v_new = np.zeros(len(u_new), dtype=np.float64)
    a_new = np.zeros(len(u_new), dtype=np.float64)
    for i in range(len(indices)):
    j1 = indices
    if i < len(indices) - 1:
    j2 = indices[i + 1]
    else:
    j2 = j1 + 1
    v_new = np.amin(v[j1:j2])
    k = np.argmin(v[j1:j2]) + j1
    a_new = a[k]

    return u_new, v_new, a_new


    The above code has a problem when treat floating number because there is not exact equality between two floating number. So I have to change it to a very 'stupid' way

    def remove_duplicates(u, v, a):
    u_new = u
    v_new = v
    a_new = a
    cnt = 0
    for i in range(len(u)):
    if cnt <1:
    u_new[cnt] = u
    v_new[cnt] = v
    a_new[cnt] = a
    cnt += 1
    else:
    if abs(u-u_new[cnt-1]) > 1e-5:
    u_new[cnt] = u
    v_new[cnt] = v
    a_new[cnt] = a
    cnt += 1
    else:
    print("Two points with same x coord found.ignore", i)
    if v_new[cnt-1] > v:
    v_new[cnt-1] = v
    a_new[cnt-1] = a

    return u_new[:cnt], v_new[:cnt], a_new[:cnt]


    How can I program it in a Pythonic way?

    Continue reading...

Compartilhe esta Página