作者liyih ()
看板Perl
标题Re: [问题] spearman 排序相关系数
时间Mon Feb 14 10:54:59 2011
※ 引述《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)
1F:推 lqz:非常感谢您 让我多学会了很多东西 02/14 16:33
2F:推 lqz:想再请问一下 \@array1 阵列前的斜线 作用是什麽呢? 02/15 00:05
4F:推 lqz:感谢 我笨笨的用prel前面的\ 搜寻了好久 02/15 18:59