Matlab在python中的排序函数

时间:2017-07-18 22:08:28

标签: python arrays matlab sorting indexing

假设我在matlab中有一个矩阵a,而在b中有一个向量a = 2 1 1 3 3 1 3 2 2 b = 1 3 2 ,如下所示:

sort

使用matlab的[n idx] = sort(b) n = 1 2 3 idx = 1 3 2 anew = a(idx,idx) anew = 2 1 1 3 2 2 3 1 3 函数,我可以实现以下目的:

a = np.array([[2,1,1],[3,3,1],[3,2,2]])

b = [0,2,1]

idx = [i[0] for i in sorted(enumerate(b), key=lambda x:x[1])]

现在,我想在python中做同样的事情。我的尝试:

anew

问题在于我无法像使用Matlab那样找到构建anew=a[idx] anew array([[2, 1, 1], [3, 2, 2], [3, 3, 1]]) 矩阵的方法。我试过了:

{{1}}

正如你所看到的结果(matlab与python)不一样。

任何提示?

1 个答案:

答案 0 :(得分:2)

numpy具有高级索引,因此在两个维度上直接使用idx将触发高级索引,结果将为1d数组;要以交叉产品方式进行索引,您需要使用np.ix_来构建索引网格,如文档中所述:

  

使用ix_可以快速构建索引数据的索引数组   交叉产品。

a[np.ix_(idx, idx)]

#array([[2, 1, 1],
#       [3, 2, 2],
#       [3, 1, 3]])

或者另一个选项是分两步进行切片:

a[idx][:,idx]
#array([[2, 1, 1],
#       [3, 2, 2],
#       [3, 1, 3]])