горизонтальные абсолютные значения каждой строки - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь вычислить абсолютные значения строки 2 - значения строки 1, а затем горизонтальные абсолютные значения каждой строки в моем входном файле. Вот часть этого ввода.

43  402 51  360  
63  60  69  63  
65  53  89  55   
103 138 135 135  
109  36 123  38  

Чтобы быть более точным в том, что я пытаюсь сделать, я сделал следующий пример

initial data

0 2 0 0
0 1 1 1

next stage (absolute value after subscription the second line minus the first line)  

2 2 0
1 0 0

final stage (horizontal application of abs values until one column remained) 

0
1

Приведенный ниже код был неудачной попыткой получить финальная стадия одного столбца. Моя проблема здесь в том, что я не знаю, как получить последний (желательный) этап с помощью подпрограммы, так как считаю, что это лучший способ решения моей проблемы. Конечно, любая идея или лучший подход приветствуется.

#!/usr/bin/perl
use feature qw(say);
use strict;
use warnings;
use Data::Dumper;

my @rows = 'table_only_numbers';
open(my $fh, '<:encoding(UTF-8)', $rows)

sub ori { 
for ($num_cols=@{ $rows[$r-1]}; $num_cols=1; $num_cols-- ){
    my @diff_diffs = map { abs($diffs[$_-1] - $diffs[$_]) } 1..$num_cols-1;
        @final=@diff_diffs;
    say join ' ',@final;
return (final) }

my $num_cols = @{ $rows[0] };
for my $r (1..$#rows) {
   die "Bad format!" if @{ $rows[$r] } != $num_cols;
     my @diffs = map { abs($rows[$r-1][$_] - $rows[$r][$_]) } 0..$num_cols-1; 

 while ($num_cols>1) 
{   
$final_output = ori(@{ $rows[0] })
say "final_output";
}
}
close $fh;

1 Ответ

1 голос
/ 29 января 2020

Наконец-то, я понял это сам без подпрограмм !!! Я публикую его на тот случай, если в будущем кто-то столкнется с той же проблемой. Я знаю, что это самый простой способ сделать это, но, поскольку я новичок ie в Perl, это самый простой способ для меня.

Итак, я использовал:

 for the first abs of the line 2 minus the line 1
    my @data = map { abs($current[$_]-$previous[$_]) } 0..$#current;
                push @final, \@data; 

Чтобы получить абсолютное значение строки 2 минус строка 1

И после того, как я использовал 3 раза, у меня осталось 3 столбца ( в моем случае) следующая строка кода и каждый раз я заменял @xxx новой переменной. и у меня есть желаемый вывод I столбца.

foreach my $row (@XXX) {
    my @data = map { abs(@{$row}[$_]-@{$row}[$_+1]) } 0..$#{$row}-1;
    say join ' ', @data;
    push @XXX, \@data;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...