如何计算两个数组中每个元素之间的差异?

dac*_*dac 2 perl matrix perl-data-structures

我有一个带有数字的文本文件,我按如下方式分组,用空行分隔:

42.034 41.630 40.158 26.823 26.366 25.289 23.949

34.712 35.133 35.185 35.577 28.463 28.412 30.831

33.490 33.839 32.059 32.072 33.425 33.349 34.709

12.596 13.332 12.810 13.329 13.329 13.569 11.418
Run Code Online (Sandbox Code Playgroud)

注意:组总长度相等,如果组很大,可以排列多行,比如500个数字.我正在考虑将组放在数组中并沿着文件的长度进行迭代.

我的第一个问题是:如何从数组1中减去数组2的第一个元素,从数组2中减去数组3,类似于第二个元素,依此类推直到组的末尾?

即:

34.712-42.034,35.133-41.630,35.185-40.158 ...till the end of each group

33.490-34.712,33.839-35.133   ..................
Run Code Online (Sandbox Code Playgroud)

然后将第一个元素的差异保存在一个组中(第二个问题:如何?)直到结束

即:

34.712-42.034 ; 33.490-34.712 ; and so on in one group

35.133-41.630 ; 33.839-35.133 ; ........
Run Code Online (Sandbox Code Playgroud)

我是初学者,所以任何建议都会有所帮助.

Axe*_*man 6

假设您打开了文件,以下是快速草图

use List::MoreUtils qw<pairwise>;
...

my @list1 = split ' ', <$file_handle>;
my @list2 = split ' ', <$file_handle>;

my @diff  = pairwise { $a - $b } @list1, @list2;
Run Code Online (Sandbox Code Playgroud)

pairwise 是最简单的方法.

否则就有旧备用:

# construct a list using each index in @list1 ( 0..$#list1 )
# consisting of the difference at each slot.
my @diff = map { $list1[$_] - $list2[$_] } 0..$#list1;
Run Code Online (Sandbox Code Playgroud)