我有一個對角線矩陣和一個相同尺寸的矩陣。我如何將對角線矩陣按升序排列,然后在另一個矩陣上做同樣的步驟?例如,如果我的矩陣是3 x 3,我必須交換對角線上的第1列和第2列條目以使其升序,我如何將這套相同的步驟應用于另一個矩陣,但在這里我將整個第1列和第2列交換?
我想過使用某種合并排序,但這樣它就不會在對角線上排列數值。我如何做到這一點呢?
uj5u.com熱心網友回復:
要對一組數值進行排序,你通常必須對它們進行重新排序。你可以通過直接排序來做到這一點,但你也可以間接排序,首先計算一個索引序列,告訴你如何對序列進行排序。在 Python 中,這個序列可以通過 numpy.argsort 方法獲得。一旦你有了這個序列,你就可以應用它來對你的數字集進行排序,但你也可以用它來以同樣的方式重新排列任何數值的陣列。下面是一個例子:
import numpy as np
# construct example matrices
n = 4
D = np.diag(np.random.rand(n) )
A = np.random.rand(n,n)
# 獲得一個索引序列,對陣列進行排序。
idx = np.argsort(np.diag(D))
# 根據序列對對角線條目進行排序 # 對角線條目進行排序。
Dp = np.diag(np.diag(D)[idx])
# 根據序列對各列進行排序 # 根據序列對各列進行排序
Ap = A[:,idx]
print('idx'/span>)
print(idx)
print('D:')
print(D)
print('Dp:')
print(Dp)
print('A:')
print(A)
print('Ap:')
print(Ap)
注意,在Matlab中,對一個序列進行排序的索引序列在sort函式的第二個回傳值中給出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/326067.html
標籤:
下一篇:如何在MacOS上下載Sf軟體包
