【发布时间】:2012-08-20 04:43:41
【问题描述】:
我以前从未深入研究过 Perl 的世界,我觉得它很混乱,需要一些帮助。在下面的代码中, calc() 部分返回“输入”超过“计数”样本的运行平均值。我想修改它,以便 calc() 返回样本集中的最大值。提前感谢您的帮助!
sub calc
{
my ($this, $dim, $input, $count) = @_;
if ($count < 1)
{
warn "count=$count is less than 1.";
return undef;
}
my $inputsum_in = $this->{inputsum};
my ($inputcumsum, $inputsum_out) = PDL::CumulativeSumOver2($input, $inputsum_in);
my $inputdelay = $this->delay('inputhistory', $input);
my $inputdelaysum_in = $this->{inputdelaysum};
my ($inputdelaycumsum, $inputdelaysum_out) = PDL::CumulativeSumOver2($inputdelay, $inputdelaysum_in);
$this->{inputsum} = $inputsum_out;
$this->{inputdelaysum} = $inputdelaysum_out;
my $sampleno = $this->{sampleno};
my $divider = $count;
if($sampleno < $count)
{
my $last = $dim - 1;
$divider = sequence($dim) + ($sampleno + 1);
my $start = $count - $sampleno;
$divider->slice("$start:$last") .= $count if $start <= $last;
$this->{sampleno} = $sampleno + $dim;
}
return ($inputcumsum - $inputdelaycumsum) / $divider;
}
【问题讨论】:
-
感谢您的反馈。在上面的代码中,'$input' 来自每 100 毫秒读取一次的传感器,因此无论有多少样本('$count'),我都选择查看返回的最大值。我认为 return max($data_set);会很好。我只是不知道如何从“$input”生成数据集。数据集需要不断更新新的输入,同时丢弃最旧的数据。 perl 解释器内置在汽车诊断软件中,因此 calc() 上面的方法就是它需要完成的方式。
-
好吧,我已经脱离了 PDL 的元素。我假设会有一个 max() 函数并用谷歌搜索它。但至于从数据中创建 piddles,我最终会为您阅读 PDL 文档。
-
“max”方法适用于任何 PDL 对象。如果你“使用 PDL”,max 也是一个导入到你当前包中的函数。看起来编写您的代码的人对 PDL 了解一两件事,而获得 PDL 答案的最佳地点是加入 Perldl 邮件列表:mailman.jach.hawaii.edu/mailman/listinfo/perldl