я следующий разреженной матрица А.Capturing ненулевых элементы, Графы и индексы разреженных матриц
2 3 0 0 0
3 0 4 0 6
0 -1 -3 2 0
0 0 1 0 0
0 4 2 0 1
Тогда я хотел бы, чтобы захватить следующую информацию оттуда:
кумулятивные количество записей, так как матрица сканируется по столбцу. Утолщение:
Ap = [0, 2, 5, 9, 10, 12];
строки индексов записей, поскольку матрица сканируется по столбцам. Утолщение:
Ai = [0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4];
Элементы нулевой матрицы, в качестве матрицы сканируются по столбцам. Утолщение:
Ax = [2, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 1];
Поскольку фактическая матрица А является потенциально very2 большой, есть ли эффективный способ в Perl, которые могут захватить эти элементы? Тем более, что в матрицу A не вклеивается вся оперативная память.
Я придерживаюсь следующего кода. Который не дает того, что я хочу.
use strict;
use warnings;
my (@Ax, @Ai, @Ap) =();
while (<>) {
chomp;
my @elements = split /\s+/;
my $i = 0;
my $new_line = 1;
while (defined(my $element = shift @elements)) {
$i++;
if ($element) {
push @Ax, 0 + $element;
if ($new_line) {
push @Ai, scalar @Ax;
$new_line = 0;
}
push @Ap, $i;
}
}
}
push @Ai, 1 + @Ax;
print('@Ax = [', join(" ", @Ax), "]\n");
print('@Ai = [', join(" ", @Ai), "]\n");
print('@Ap = [', join(" ", @Ap), "]\n");
@foolishbrat Кстати, сравнивать 'печать "\ @Ax = [@Ax] \ п"; 'к тому, что у вас есть. –