Re: [問題] spearman 排序相關係數

看板Perl作者時間14年前 (2011/02/14 10:55), 編輯推噓3(301)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《lqz (192)》之銘言: : @array1=(4,2,6,7) : @array2=(8,11,3,9) : 要得到兩個排序完的陣列 : @order1=(2,1,3,4) : @order2=(2,4,1,3) : 再對這兩個排序完的陣列做pearson就是spearman : pearson我已經寫完了 : 但是要怎麼做這種排序呢? : 如果對array1做sort{$a<=>$b}的話 : array1就會變成2,4,6,7 : 排序當然是1234 : 但不知如何得到 想要的 2134對應2413 : 不知版上前輩是否能指點在下 : 因為要處理的是兩個2維陣列 : 第一欄對第一欄 : 第二對第二 : 的spearman 和cpan上的輸入格式不合 所以想自己寫 試著去用 index 做 sort,參考: [1] sort - perldoc.perl.org http://perldoc.perl.org/functions/sort.html [2] How do I sort into an index? http://www.perlmonks.org/?node_id=60442 [ CODE ] #!/usr/bin/perl use strict; use warnings; use sort 'stable'; my @array1 = ( 4, 2, 6, 7 ); my @array2 = ( 8, 11, 3, 9 ); my @order1; my @order2; sub my_sort { my ($ref) = @_; my @new = sort { $ref->[$a] <=> $ref->[$b] } 0 .. $#$ref; my @idx; map { $idx[ $new[$_] ] = $_ + 1 } 0 .. $#new; return @idx; } sub main { @order1 = my_sort( \@array1 ); @order2 = my_sort( \@array2 ); print join( " ", @order1 ), "\n"; print join( " ", @order2 ), "\n"; } main; [ OUTPUT ] 2 1 3 4 2 4 1 3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.64.130 ※ 編輯: liyih 來自: 140.114.64.130 (02/14 10:55)

02/14 16:33, , 1F
非常感謝您 讓我多學會了很多東西
02/14 16:33, 1F

02/15 00:05, , 2F
想再請問一下 \@array1 陣列前的斜線 作用是什麼呢?
02/15 00:05, 2F

02/15 11:30, , 3F
參考(reference) http://ppt.cc/Ay8!
02/15 11:30, 3F

02/15 18:59, , 4F
感謝 我笨笨的用prel前面的\ 搜尋了好久
02/15 18:59, 4F
文章代碼(AID): #1DM9c6Is (Perl)
討論串 (同標題文章)
文章代碼(AID): #1DM9c6Is (Perl)