【问题标题】:Remove duplicate coordinates stored in arrays in python删除存储在python数组中的重复坐标
【发布时间】:2021-06-27 18:13:23
【问题描述】:

我将 3d 坐标存储在三个数组中。下面以坐标(1,2,3), (2,3,4) and (3,4,5)共四个坐标点为例,其中第一个坐标点是重复的。

x = [1, 2, 3, 1]
y = [2, 3, 4, 2]
z = [3, 4, 5, 3]

现在,我想尽可能高效地删除重复的坐标,以便上述数组导致

x_prime = [1, 2, 3]
y_prime = [2, 3, 4]
z_prime = [3, 4, 5]

...仍然包含相同的坐标(1,2,3), (2,3,4) and (3,4,5),但是没有(1,2,3) 的重复条目

【问题讨论】:

    标签: python performance numpy


    【解决方案1】:

    在纯python中:

    x_prime = list(dict([e, 0] for e in x).keys())
    

    编辑:

    Mustafa Aydin 在 cmets 中的解决方案更加简单:

    list(dict.fromkeys(x))
    

    【讨论】:

    • 您也可以使用list(dict.fromkeys(x)) 作为您的订单保留解决方案。
    【解决方案2】:

    你可以使用np.unique(..., axis=0):

    np.unique(np.array([x, y, z]).T, axis=0)
    # [[1 2 3]
    #  [2 3 4]
    #  [3 4 5]]
    

    如果需要解包结果:

    x_prime, y_prime, z_prime = np.unique(np.array([x, y, z]).T, axis=0)
    
    x_prime
    # [1 2 3]
    
    y_prime
    # [2 3 4]
    
    z_prime
    # [3 4 5]
    

    【讨论】:

      【解决方案3】:

      我想这是您问题的简单、pythonic 和线性解决方案。请告诉我性能。

      l = []
      for a, b, c in zip(x, y, z):
          l.append((a, b, c))
      
      x_prime = []
      y_prime = []
      z_prime = []
      
      for a, b, c in set(l):
          x_prime.append(a)
          y_prime.append(b)
          z_prime.append(c)
      

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 1970-01-01
        • 2014-03-27
        • 2021-11-25
        • 2020-10-05
        • 1970-01-01
        • 2016-10-29
        • 2018-01-21
        • 2020-03-06
        相关资源
        最近更新 更多