1樓:靜待花開
tiedrank()函式。
但如果其中有相同數,則這幾個數的秩都一樣。且是秩和的平均。如這個數在其中排第3,4,5。那麼返回的秩是(3+4+5)=3。
再例如:
tiedrank([10 20 30 40 20])ans = 1.0000 2.5000 4.0000 5.0000 2.5000
如果沒有相同數,則
tiedrank([10 60 70 30 20])ans = 1 4 5 3 2
2樓:原來
借鑑樓上 @runze Zheng 還有 @梁亦聰 的思路,總結如下:
一列資料,比如a = [7 5 9 3 10]; 想要返回每個元素在本組資料中的排序值(秩,結果為[3 2 4 1 5]),暫時沒有現成的函式可以一步到位實現。比如R語言中,rank函式可以一步實現此結果,探索了一下,MATLAB中可以用如下方式迂迴實現:
一步實現方法: [~, ~, idx] = unique(a, 'sorted'); 但這種方法無法實現逆序。
如果想實現逆序必須通過兩步才能實現:
% 方法1[~
,idx]=
sort(a
,'ascend');[
~,idx]
=sort
(idx
,'ascend'
);%其中`ascend`可省略
% 方法2[~
,idx]=
sort(a
,'ascend');[
~,~,
idx]
=intersect(1
:length
(idx
),idx
);% 方法3[~
,idx]=
sort(a
,'ascend'
);idx
(idx)=
1:length
(idx
);@2018.12.21修改
如果確定向量沒有並列秩的情況,`tiedrank`函式也可以實現這個功能。
3樓:
%對於序列X
[~, Xidx] = sort(X);
[~,Xidx2] = sort(Xidx);
% Xidx2就是所求的序列
以下是解釋
%例如X = [7, 5, 9, 3, 10][XSorted, Xidx] = sort(X);
% 那麼可得XSorted為排序後的X, Xidx為XSorted中的值在原序列X中的位置,即:
% XSorted = [3, 5, 7, 9, 10]% Xidx4, 2, 1, 3, 5]
% 不難發現,1在Xidx中位置排第3——代表7在X中大小排第3% 2在Xidx中位置排第2——5在X中大小排第2 ……% 3在Xidx中位置排第4——9在X中大小排第4% 也就是說:只要求出自然數序列[1, 2, 3, 4, 5]在Xidx中的位置,就可以知道[7, 5, 9, 3, 10]在X中大小的排序。那麼如何查呢?
[XidxSorted,Xidx2] = sort(Xidx);
% 易知XidxSorted就是排序後的自然數序列[1, 2, 3, 4,5],而Xidx2就是[1, 2, 3, 4, 5]在Xidx的位置
所以Xidx2就是所求的答案
4樓:梁亦聰
[~,A] = sort(X); %X是列向量
B = zeros(size(A));
B(A) = (1:length(A))'; %B(i)是X(i)在X中從小到大的排名
5樓:visss
你可以先對一列數排個序,然後
a=rand(1,10);%隨機生成乙個數列b=sort(a);
for i=1:length(b)
for j=1:length(aif a[j]==b[ia[j]=iend
endend
如何生成一列B中有而A中沒有的IP段?
火鍋大魔王 這時候就該安利一波python import csv from faker import Factory 生成假資料,並寫入csv file.引用faker生成ipv4的ip 會生成名為 ip test.csv的檔案,預設1000條資料 def generate fake ip numb...
如何用stata將單元格的一列拆成多列 如下圖所示,求大神解答 ?
何冬州楊巔楊豔華典生 在stata中,我想有必要找到 能找到簡潔一些的方案來實現。在excel中可以在C1中輸入公式 index A A,2 row 2 column A1 然後選中C1 D1及向下的單元格,按ctrl R向右填充,按F2加ctrl 回車向下填充。注 不再建議在excel2003中使...
哪一列國際列車經過的國家最多?
時光之末 古早時期的東方快車,即巴黎至伊斯坦堡 金鑼落淚 的豪華旅遊列車,似乎經過不少國家,但不一定最多。參照某卡車遊戲 東方快車 成就,依次停靠如下城市 巴黎 斯特拉斯堡 髪 慕尼黑 獨 維也納 奧 布達佩斯 匈 布加勒斯特 羅,金鑼再落淚 君堡 土,金鑼三落淚 當中可能會路過斯洛伐克,以及肯定路...