免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3857 | 回复: 3

如何生成矩阵 [复制链接]

论坛徽章:
1
羊年新春福章
日期:2015-04-28 20:40:58
发表于 2014-09-21 12:27 |显示全部楼层
__DATA__
a        Z1_3        Z2_2        Z3_5        Z4_9        Z6_3
b        Z1_1        Z2_4        Z4_4        Z5_2
c        Z1_2        Z2_4        Z3_7        Z5_21
d        Z2_4        Z3_4        Z4_2        Z6_7

想生成如下矩阵:

        a        b        c        d
Z1        3        1        2        0
Z2        2        4        4        4
Z3        5        0        7        4
Z4        9        4        0        2
Z5        0        2        21        0
Z6        3        0        0        7

即例如Z1_3中  "_ " 后面的数字填充到矩阵中,如果对应的地方不存在,则填充0;
请大神们帮忙写一下代码~
感谢!

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2014-09-21 14:58 |显示全部楼层
回复 1# 清泉一边
  1. #!/usr/bin/perl -w
  2. my $k = {};
  3. my (%h1,%h2);
  4. while(<DATA>){
  5.         chomp;
  6.         my($k1,@k2) = (split);
  7.         $h1{$k1} = 1;
  8.         foreach my $key (@k2){
  9.                         my ($k3,$v) = (split /_/,$key);
  10.                         $k->{$k1}->{$k3} = $v;
  11.                         $h2{$k3} = 1;
  12.         }
  13. }

  14. foreach my $H1 (sort keys %h1){
  15.                 print "\t$H1";
  16. }
  17. print $/;
  18. foreach my $H2 (sort keys %h2){
  19.                 print $H2;
  20.                 foreach my $H1 (sort keys %h1){
  21.                         $k->{$H1}->{$H2} ||= 0;
  22.                         print "\t".$k->{$H1}->{$H2};
  23.                 }
  24.                 print $/;
  25. }
  26. __DATA__
  27. a        Z1_3        Z2_2        Z3_5        Z4_9        Z6_3
  28. b        Z1_1        Z2_4        Z4_4        Z5_2
  29. c        Z1_2        Z2_4        Z3_7        Z5_21
  30. d        Z2_4        Z3_4        Z4_2        Z6_7
复制代码

论坛徽章:
1
羊年新春福章
日期:2015-04-28 20:40:58
发表于 2014-09-22 11:29 |显示全部楼层
谢谢!学习了~回复 2# huang6894


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2014-09-22 12:06 |显示全部楼层
本帖最后由 mcshell 于 2014-09-22 12:29 编辑

回复 1# 清泉一边

  1. my ( $h, $g, @titles );
  2. while (<DATA>) {
  3.     my ($title) = /([a-z]+)/;
  4.     push @titles, $title;
  5.     while (/(\w+)_(\d+)/g) {
  6.         $h->{$title}->{$1} = $2;
  7.         $g->{$1} = $2;
  8.     }
  9. }

  10. print "\t", join "\t", @titles, "\n";
  11. for my $key ( sort ( keys %$g ) ) {
  12.     print $key;
  13.     for my $title (@titles) {
  14.         print "\t", $h->{$title}->{$key} || 0;
  15.     }
  16.     print "\n";
  17. }

  18. __DATA__
  19. a        Z1_3        Z2_2        Z3_5        Z4_9        Z6_3
  20. b        Z1_1        Z2_4        Z4_4        Z5_2
  21. c        Z1_2        Z2_4        Z3_7        Z5_21
  22. d        Z2_4        Z3_4        Z4_2        Z6_7
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP