【问题标题】:Can I sort two related arrays in parallel using python?我可以使用 python 并行排序两个相关的数组吗?
【发布时间】:2022-11-08 21:40:14
【问题描述】:

我有两个形状为 (74395, 1) 的 NumPy 数组存储浮点值 其中 arr1[0] 与 arr2[0] 相关,依此类推。 我想按值按升序对它们进行排序 存储在第二个数组中。

举个例子:

arr1: [[1]
       [2]
       [3]]

arr2: [[6]
       [2]
       [4]]

想要的结果:

arr1: [[2]
       [3]
       [1]]

arr2: [[2]
       [4]
       [6]]

我怎么能在python中做到这一点?

【问题讨论】:

    标签: python arrays numpy sorting


    【解决方案1】:

    zip将两者放在一起,排序,zip再次转置结果,解构:

    >>> arr1 = [1, 2, 3]
    >>> arr2 = [6, 2, 4]
    >>> arr2, arr1 = zip(*sorted(zip(arr2, arr1)))
    >>> arr1
    (2, 3, 1)
    >>> arr2
    (2, 4, 6)
    

    【讨论】:

      【解决方案2】:

      numpy.argsortnumpy.take_along_axis 一起使用:

      ind = arr2.argsort(axis=0)
      
      np.take_along_axis(arr1, ind, axis=0)
      np.take_along_axis(arr2, ind, axis=0)
      

      输出:

      (array([[2],
              [3],
              [1]]),
       array([[2],
              [4],
              [6]]))
      

      【讨论】:

      • 为什么要引入像 numpy 这样的巨大依赖项……?
      • @deceze 给定 OP 使用 2d 数组,我自动假设它的 numpy :P。
      • @Chris 正确 - 我确实在使用 numpy 数组并且不会绕过它^^。两件事 - 为了使更改生效,我必须覆盖变量。所以 arr1 = np.take_along... 等等。其次,我的 arr1 值在转换后都是 0
      • @FLOROID您的意思是排序后的 arr1 以许多零开头还是全为零((arr1 == 0).all() == True)?
      • 这一定是一些奇怪的错误,因为在重新运行应用程序后,数据现在已正确排序,据我所知,有这么多数据哈哈
      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2013-08-30
      • 2016-07-26
      相关资源
      最近更新 更多