我真的不明白PDL的输入功能。就个人而言,我一直在使用rcols功能创建pdls,正如我在网络上的各个地方所推荐的那样。
我有一个这样的输入文件:
3 -4 -1
0 5 2
3 5 6
2 5 2
5 5 5
5 5 6
其中,我想分配给一个Piddle。当我把它分配给这样的小提琴时,
my @pdls = rcols $in_fh, { COLSEP => "\\s" } ;
my $pdl = pdl(@pdls[1 .. $#pdls]);
当我打印@pdls时,会打印出来:
[
[ 3 0 3 2 5 5]
[-4 5 5 5 5 5]
[-1 2 6 2 5 6]
]
这让我觉得它按列而不是行来拉我的文件。真的,看看代码是有道理的。当我将此输出保存到文件时(在删除所有括号后),这就是它的外观。 :
3 0 3 2 5 5
-4 5 5 5 5 5
-1 2 6 2 5 6
当我在新输入文件上运行相同的脚本时,结果不会遵循与以前相同的过程:
[
[ 0 -4 -1]
[ 3 0 0]
[ 0 5 2]
[ 0 0 0]
[ 0 5 6]
[ 3 0 0]
[ 0 5 2]
[ 2 0 0]
[ 0 5 5]
[ 5 0 0]
[ 0 5 6]
[ 5 0 0]
]
我不知道为什么会这样做。从本质上讲,我希望能够将我的文本文件读成一个小提琴。有没有人看到我缺少的东西,或能够提供任何解释?
感谢您的帮助。
答案 0 :(得分:0)
也许最好制作一个零" 3,6的零点矩阵"然后单独设置每个值,(这意味着首先将文件中的数据放入1D pdl())我会使用open()将其读入一个缩放器,然后将其放入一维中;这可能是相当复杂的...一旦你用一维的方式得到它:
open(FILE,"yourfile"); while (<FILE>) { $x = $_; }
close FILE;
$y = zeros(3,6);
p $x = sequence(18);
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
for $c(0..5) { for $d(0..2) { $y($d,$c) .= $x($e++) }}
p $y
[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]
[15 16 17]