0

我想从 Nx3 数组中提取大小为 3x3 的块。

    foreach (@TotalData){
         print "@{$_}\n";
    }

给我(例如):

    .
    .
    0.000 22.00 3.791140e+000
    0.100 22.00 2.737532e+000
    0.200 22.00 2.393466e+000
    .
    .

圆点代表其他条目。我想把这个 3x3 块放在它自己的数组中。我怎样才能提取这个?

4

3 回答 3

2

你想用积木做什么?也许你只想要一个@TotalData 的片段(例如@TotalData[4,5,6]甚至splice(@TotalData, 4, 3)),也许你想一次循环 3 个(例如 with List::MoreUtils::natatime);你还没有真正提供足够的信息可以说。

如果您不介意清除 @TotalData 作为副作用:

while ( my @block = splice( @TotalData, 0, 3 ) ) {
    # do something with @block (which will have 3 elements,
    # except on the last iteration, where it will have 1-3)
}

只获得完整的 3 块:

while ( 3 == ( my @block = splice( @TotalData, 0, 3 ) ) ) {
    # do something with @block (which will have 3 elements)
}
于 2013-03-17T05:34:50.493 回答
1

我很确定PDL有这样做的方法。事实上,在 PDL 文档中的Conway 的生命游戏示例中研究了几乎相同的问题。

于 2013-03-17T22:00:18.717 回答
1

您在寻找List::MoreUtils::natatime吗?

#!/usr/bin/env perl

use strict;
use warnings;

use List::MoreUtils qw( natatime );

my @data = (
    [1 .. 3],
    [4 .. 6],
    [7 .. 9],
    ['a' .. 'c'],
    ['d' .. 'f'],
    ['g' .. 'i'],
);

my $it = natatime(3, @data);

while (my @set = $it->()) {
    for my $r ( @set ) {
        print "@$r\n";
    }
    print '-' x 30, "\n";
}

输出:

~/tmp> ./jj.pl
1 2 3
4 5 6
7 8 9
------------------------------
美国广播公司
定义
吉
------------------------------
于 2013-03-17T22:34:15.683 回答