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...