1

我真的不明白 PDL 的输入功能。就个人而言,我一直在使用 rcols 功能来创建 pdls,正如在网络上的各个地方向我推荐的那样。

我有一个这样的输入文件:

 3 -4 -1
 0 5 2
 3 5 6
 2 5 2
 5 5 5
 5 5 6

其中,我想分配给一个 Piddle。当我将它分配给这样的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]
]

我不知道它为什么这样做。本质上,我希望能够将我的文本文件读入一个 piddle。有没有人看到我错过了什么,或者能够提供任何解释?

谢谢你的帮助。

4

1 回答 1

0

也许最好制作一个“3,6 零矩阵”,然后单独设置每个值,(这意味着首先将文件中的数据放入 1D pdl())我会使用 open() 将其读入然后缩放器将其放入 1D piddle 中;这可能是相当复杂的......一旦你把它放在一个 1D piddle 中,请执行以下操作:

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]
于 2016-01-31T05:52:39.070 回答