逐行排列两个numpy矩阵

时间:2016-11-11 09:08:11

标签: python arrays sorting numpy matrix

逐行并行排列两个numpy矩阵的最有效方法是什么?玩具示例:

对此alpha进行排序:

a = [['c', 'b', 'e', 'd'], 
     ['a', 'd', 'b', 'e']]

然后,将其与a:

并行排序
b = [['1', '2', '3', '4'], 
     ['2', '1', '4', '3']]

排序后的结果:

a = [['b', 'c', 'd', 'e'], 
     ['a', 'b', 'd', 'e']]

b = [['2', '1', '4', '3'], 
     ['2', '4', '1', '3']]

在我的实际案例中,ab是相同大小的大型二维矩阵。

如果我使用idx = a.argsort(),我会获得索引以对a的每一行进行排序。这些可以一步到位吗? b = b[idx]无效。

2 个答案:

答案 0 :(得分:3)

您可以使用advanced indexing -

idxx = np.arange(a.shape[0])[:,None],a.argsort(1)
a_out = a[idxx]
b_out = b[idxx]

示例运行 -

In [75]: a
Out[75]: 
array([['b', 'c', 'd', 'e'],
       ['a', 'b', 'd', 'e']], 
      dtype='|S1')

In [76]: b
Out[76]: 
array([['2', '1', '4', '3'],
       ['2', '4', '1', '3']], 
      dtype='|S1')

In [77]: a_out
Out[77]: 
array([['b', 'c', 'd', 'e'],
       ['a', 'b', 'd', 'e']], 
      dtype='|S1')

In [78]: b_out
Out[78]: 
array([['2', '1', '4', '3'],
       ['2', '4', '1', '3']], 
      dtype='|S1')

答案 1 :(得分:0)

试试这个

Python 3.4.3 (default, Sep 14 2016, 12:36:27) 
    [GCC 4.8.4] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a = ['c', 'b', 'e', 'd']
    >>> b = [1,    2,   3,   4 ]
    >>> a,b=zip(*sorted(zip(a, b)))
    >>> a
    ('b', 'c', 'd', 'e')
    >>> b
    (2, 1, 4, 3)
    >>>