1

PDL の入力関数がよくわかりません。個人的には、Web のさまざまな場所で推奨されているように、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]
]

そして、なぜそうしているのか、私にはわかりません。要するに、テキスト ファイルを piddle に読み込めるようにしたいのです。私が欠けているものを見たり、説明を提供したりできる人はいますか?

助けてくれてありがとう。

4

1 に答える 1

0

おそらく、「ゼロの3,6マトリックス」を作成してから、各値を個別に設定する方が良いでしょう(つまり、ファイルからのデータを最初に1D pdl()に入れることを意味します)。open()を使用してそれを読み取りますスケーラーはそれを 1D ピドルに入れます。これはかなり複雑になる可能性があります... 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 に答える