如何根据Statistics :: Basic :: ComputedVector中的数组过滤向量?

时间:2011-03-09 16:21:26

标签: perl vector filter statistics grep

我想使用Statistics::Basic::ComputedVector set_filter,但我想要使用的过滤器是1和0的数组。这可能吗?

这就是我想要做的事情:

my $v1 = vector(1,2,3,4,5);
my @filter = qw(1 0 0 1 1);
my $cv = computed($v1);
$cv->set_filter(@filter);

我尝试了以下内容:

my $v1  = vector(1,2,3,4,5);
my $compV1 = computed($v1);
my @filter = (1) x $compV1->query_size();
$filter[-1] = 0;
say $compV1;
$compV1-> set_filter( sub { grep { $filter[$_] } 0..$#_ } );
say $compV1;

...但是会打印出来:

[1, 2, 3, 5, 7]
[0, 1, 2, 3]

我该怎么办?

我对grepmap的了解似乎超过Statistics::Basic,这是一个问题,所以即使您从未使用过这个模块,我猜您也可以提供帮助

2 个答案:

答案 0 :(得分:2)

->set_filter( sub { @_[ grep $filter[$_], 0..$#_ ] } )

答案 1 :(得分:1)

试试这个过滤器:

$compV1->set_filter(sub { map { $filter[$_] ? $_[$_] : () } 0..$#_ });

您的第二次尝试已关闭,但您返回的是索引而不是实际值。