演算法 獲得乙個矩陣的順序矩陣

2021-07-05 21:21:30 字數 1274 閱讀 4506

問題描述:已知矩陣g,nxk維,獲得矩陣g每一列的元素的秩。此處秩的定義是:將乙個陣列排序後(按公升序或降序),陣列中的元素在排完序的陣列中的序號。實現平台:matlab

首先,編寫獲得乙個陣列的秩的函式。如下

輸入:vector-----陣列或向量

輸出:ordervector----由每個元素的秩所組成的陣列

function ordervector= order_vector(vector)

array=sort(vector,'ascend');    %  獲得排序後的陣列

ordervector=zeros(length(vector),1);

for i=1:length(vector)

temp=find(array==vector(i));   %find()函式,找尋元素在排序後的陣列中的位置,有可能不止乙個,因為可能有重複的元素

if   length(temp)~=1               %若有重複的元素

ordervector(i)=temp(1);    %重複元素的賦予相同的秩

else

ordervector(i)=temp;

endend

end

下面呼叫上面的函式,獲得g每一列的順序陣列

for i=1:k

l(:,i)=order_vector(g(:,i));

%下面對順序陣列進行修正,因為裡面有重複的秩

x=l(:,i);

array=sort(l(:,i),'ascend');     %  獲得排序後的陣列

for j=1:n

temp=find(x==array(j));    %find()函式,找尋元素在排序後的陣列中的位置,有可能不止乙個,因為可能有重複的元素

if length(temp)~=1                  %若有重複的秩

x(temp(1))=array(j);      %重複的秩中第乙個不變

for k=2:length(temp)       %重複的秩中第乙個不變,後面的秩加1

x(temp(k))=array(j)+1;

endend

endl(:,i)=x; %對順序矩陣的每一列進行更新

end 

其實,上面的兩部分可以合起來,寫成乙個函式。如果矩陣中沒有重複元素,上面的函式可以獲得其順序矩陣。如果有重複元素,下面那段程式是對獲取的順序矩陣的後續處理。

獲得順序矩陣的關鍵是:如果矩陣中沒有重複元素的話,比較好操作。如果,有重複元素,需要對重複元素的秩進行處理。

由乙個矩陣得到乙個掩模矩陣

1.假設有乙個不完整的資料,如下 2030251 51830 317810 0232930112 1815 0import pandas as pd import numpy as np read data data pd.read csv data.csv a np.isnan data get ...

乙個魔方矩陣的個人演算法

這樣乙個魔方矩陣 按以下示例方陣格式,生成乙個由自然數1至n 2組成的n階方陣。1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15 16 22 23 25 注 n不僅限於5。我的 include using namespace std defi...

求乙個矩陣的逆矩陣 用伴隨矩陣求

題目 noyj774 用代數余子式求逆矩陣方法 若現有矩陣a,要求其逆矩陣 若 a 0,則其不存在逆矩陣 若 a 0,其逆矩陣a 1 a a 其中 a為其伴隨矩陣 伴隨矩陣的求法 a j i m i j 其中m i j 為a i j 的代數余子式 即 a1 i j m i j 再將 a1轉置得到 a...