24小时热门版块排行榜    

CyRhmU.jpeg
查看: 303  |  回复: 0

wangxin525

铜虫 (小有名气)

[求助] 解释一下下面perl程序每一行的意思

比如有这样一个矩阵:
sox    7.2  3.8  6.8  9.2  5.6
sox    5.4  2.3  4.6  8.9  9.0
sox    6.7  NA  7.8  9.0  3.1
goo    2.4  6.7  NA  9.0  2.1
goo    2.1  5.6  7.8  9.7  1.2
pkk    2.5  4.3  6.5  4.9  0.2
pkk    2.1  3.4  3.2  NA  4.6
pkk    3.2  5.6  6.7  9.1  2.2
这个矩阵很简单,就是有一些同名的行,现在我要做的是,把这些同名的行的数据按每一列合并起来,按什么合并,按照每一列的平均值来合并

就是说,比如行名为sox的行,第一列数据为: 7.2, 5.4, 6.7 那么第一列的平均值就是(7.2+5.4+6.7)/3=6.4,
第二列数据为3.8, 2.3, NA, 那么平均值就是  (3.8+2.3)/2=3, 以此类推,得到每一列的平均值,作为最后的值,那么行名为sox的行最后就合并为:
sox  6.4  3  ....

下列是程序:
#!/usr/bin/perl
use strict;
use warnings;
use Data:umper;
my %hash;
my %line;
while(<>{
   my @a = split;
    for my $i (0..($#a-1)) {
       $hash{$a[0]}->[$i] += $a[($i+1)];
       $line{$a[0],($i)}++ ;
   }
}
for my $k (keys %hash) {
   for my $i (0..(@{$hash{$k}}-1)) {
       $hash{$k}->[$i] /= $line{$k,($i)};
   }
}

print Dumper(\%hash);
回复此楼

» 猜你喜欢

胖成一轮明月,照亮所有瘦子
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 wangxin525 的主题更新
信息提示
请填处理意见