免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3725 | 回复: 8
打印 上一主题 下一主题

求助(分段函数) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-27 11:00 |只看该作者 |倒序浏览
分段函数
fij=m(第三列值)  Ni1≤j≤Ni2  ;
fij=0                   j<Ni1或j>Ni2 ;

Ni1(第一列数值),Ni2(第二列数值);
(j=1,2,…,9,10);(i=1,2,...)为数据的行数; m为第三列对应的值。
数据如下:
一      二      三

4        8        0.1
5        7        0.3
1        3        1.2
6        9        0.5
5        6        0.9
1        10        1.1

结果:第一步按分段函数进行计算。
0    0    0   0.1 0.1 0.1 0.1 0.1 0    0

0    0    0    0   0.3 0.3 0.3 0    0    0

1.2 1.2 1.2 0   0    0    0    0    0    0

0    0    0    0   0    0.5 0.5 0.5 0.5 0

0    0    0    0   0.9 0.9  0   0    0    0

1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3

第二步:对每列数据进行求和。
2.5
2.5
2.5
1.5
2.6
3.1
1.9
1.8
1.3

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2014-03-27 13:42 |只看该作者
本帖最后由 pitonas 于 2014-03-27 06:54 编辑

1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3
1        10        1.1
{:2_172:} 提供一个可行的思路
  1. #!/usr/bin/perl

  2. my @sum;
  3. while (<DATA>) {
  4.     my ( $beg, $end, $val ) = split;
  5.     $sum[$_] += $val for $beg .. $end;
  6. }

  7. print $_ // 0, "\n" for @sum[ 1 .. $#sum ];

  8. __DATA__
  9. 4        8        0.1
  10. 5        7        0.3
  11. 1        3        1.2
  12. 6        9        0.5
  13. 5        6        0.9
  14. 1        10        1.1
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-03-27 14:33 |只看该作者
呵呵,谢谢你。
这么精辟的代码,我用Excel算了好多天。。。回复 2# pitonas


   

论坛徽章:
0
4 [报告]
发表于 2014-03-27 15:23 |只看该作者
回复 2# pitonas
果断太精辟了~思路很赞!
{:2_168:}

   

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
5 [报告]
发表于 2014-03-27 15:43 |只看该作者
$_ // 0 
这是什么

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
6 [报告]
发表于 2014-03-28 14:32 |只看该作者
本帖最后由 xiumu2280 于 2014-03-28 14:35 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5. use File::Basename;


  6. my @data = map {[split]} <DATA>;
  7. my @d = map {my $key =$_;my $total;map {$key >= $_->[0] && $key<= $_->[1] && ($total += $_->[2])}@data;$total}1..10;
  8. print Dumper @d;



  9. __DATA__
  10. 4        8        0.1
  11. 5        7        0.3
  12. 1        3        1.2
  13. 6        9        0.5
  14. 5        6        0.9
  15. 1        10        1.1
复制代码
来一发

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
7 [报告]
发表于 2014-03-29 08:40 |只看该作者
什么是晦涩,这就是标准的例子

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
8 [报告]
发表于 2014-03-30 23:54 |只看该作者
太精辟了, 学习了!{:3_188:}

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
9 [报告]
发表于 2014-03-31 14:39 |只看该作者
mark一下。{:2_172:}
代码精简,只有  6 行,十分优美, 十分低调。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP