我正在阅读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
答案 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