删除行并创建新数组

时间:2017-04-21 03:17:40

标签: perl

我正在阅读CSV文件

A B C D
A 1, 2, 3, 4
B 5, 1, 7, 8
C 9, 4, 1, 2
D 2, 7, 8, 1

想法是计算矩阵相关

如何删除行并创建新数组?

我试过这个

my @new_row = split(/\s+/, $header_line);

这是我的第一个Perl程序

my @row = /@desired_row/ && $_;

当前输出

A 1,2,3,4   

我现在正在尝试

my @newarray = ( );
@newarray = grep ($_ > 2, @row);
print "@newarray\n";

结果我想要

A 3, 4

1 个答案:

答案 0 :(得分:0)

你的问题令人困惑。我的解释是你试图将相关矩阵读入Perl数据结构。矩阵具有单位对角线的事实似乎支持这种解释。另一方面,矩阵不对称,因此更加令人困惑。

我假设您对如何删除变量标签以及将数字放入矩阵感到困惑。在Perl中,您可以将矩阵表示为对匿名数组(密集矩阵)的引用数组,或者将其表示为行或列索引的哈希值,并且值是对匿名数组(稀疏矩阵)的引用。是否存储列向量或行向量的选择会影响您处理数据的效果,但是,再一次,您的问题中没有足够的信息来推断出最适合您情况的信息。

下面的代码显示了将该矩阵读入Perl数据结构的最基本方法。在您的代码中,您将open数据文件并分配文件句柄,例如$fh,并从中读取而不是脚本的__DATA__部分。

#!/usr/bin/env perl

use strict;
use warnings;

my @vars = split ' ', <DATA>;
my @correl;

while (my $line = <DATA>) {
    push @correl, [ $line =~ /([0-9]+)/g ];
}

print join("\t", @vars), "\n";
print join("\t", @$_), "\n" for @correl;

__DATA__
A B C D
A 1, 2, 3, 4
B 5, 1, 7, 8
C 9, 4, 1, 2
D 2, 7, 8, 1

输出:

A  B   C   D
1   2   3   4
5   1   7   8
9   4   1   2
2   7   8   1