逐行并行排列两个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']]
在我的实际案例中,a
和b
是相同大小的大型二维矩阵。
如果我使用idx = a.argsort()
,我会获得索引以对a的每一行进行排序。这些可以一步到位吗? b = b[idx]
无效。
答案 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)
>>>