我想从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块放在它自己的数组中。 我怎样才能提取这个?
答案 0 :(得分:2)
你想用块做什么?也许你只想要一片@TotalData(例如@TotalData[4,5,6]
或甚至splice(@TotalData, 4, 3)
),也许你想要一次循环3(例如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)
}
答案 1 :(得分:1)
我很确定PDL有方法可以做到这一点。实际上,在PDL文档的Conway's Game of Life example中调查了几乎同样的问题。
答案 2 :(得分: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 ------------------------------ a b c d e f g h i ------------------------------