Numpy 如何对矩阵进行对角排序

Numpy 如何对矩阵进行对角排序,numpy,linear-algebra,Numpy,Linear Algebra,如何从: 0 2 3 1 5 1 5 6 8 到 或者类似的东西?这个怎么样: a = np.random.randint(0,20,(n,n)) a # array([[10, 4, 6, 12, 6], # [ 5, 19, 1, 11, 5], # [ 6, 10, 11, 1, 2], # [ 5, 3, 0, 9, 1], # [13, 13, 3, 15, 3]]) io = np.argsort(s

如何从:

0 2 3
1 5 1
5 6 8

或者类似的东西?

这个怎么样:

a = np.random.randint(0,20,(n,n))
a
# array([[10,  4,  6, 12,  6],
#        [ 5, 19,  1, 11,  5],
#        [ 6, 10, 11,  1,  2],
#        [ 5,  3,  0,  9,  1],
#        [13, 13,  3, 15,  3]])
io = np.argsort(sum(np.ogrid[:n,:n]).ravel())
out = np.empty_like(a)
out.ravel()[io] = np.sort(a.ravel())
out
# array([[ 0,  1,  1,  3,  6],
#        [ 1,  2,  3,  6, 10],
#        [ 3,  5,  6,  9, 11],
#        [ 4,  5, 10, 12, 13],
#        [ 5, 11, 13, 15, 19]]) 

我们使用
argsort
对x和y索引的总和(使用
ogrid
生成)建立对角线顺序。然后使用高级索引将
a
的已排序元素按此顺序排列。

您能解释一下“对角排序”是什么意思吗?这个例子并不清楚。。。
a = np.random.randint(0,20,(n,n))
a
# array([[10,  4,  6, 12,  6],
#        [ 5, 19,  1, 11,  5],
#        [ 6, 10, 11,  1,  2],
#        [ 5,  3,  0,  9,  1],
#        [13, 13,  3, 15,  3]])
io = np.argsort(sum(np.ogrid[:n,:n]).ravel())
out = np.empty_like(a)
out.ravel()[io] = np.sort(a.ravel())
out
# array([[ 0,  1,  1,  3,  6],
#        [ 1,  2,  3,  6, 10],
#        [ 3,  5,  6,  9, 11],
#        [ 4,  5, 10, 12, 13],
#        [ 5, 11, 13, 15, 19]])