Re: [問題] spearman 排序相關係數
※ 引述《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
02/15 00:05, 2F
→
02/15 11:30, , 3F
02/15 11:30, 3F
推
02/15 18:59, , 4F
02/15 18:59, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章