PDLには具体的にはseq()
ありませんが、rep()
コンストラクターと、多次元データを操作および再形成する機能があります。
具体的には、これらのサイズのダミー次元を元のデータに追加し、結果を 1 次元に再形成することで、シーケンスを複製できます。
start:stop:stride を持つシーケンスは、sequence() コンストラクターで生成できる整数のシーケンスに対する算術演算によって生成できます。
以下は、元の質問の 2 つの R スニペットに対応するいくつかの PDL バージョンで、対応関係を説明するコメントが付いています。
pdl> pdl(1..3) # 1:3
$PDL1 = [1 2 3];
pdl> pdl(1..3)->(*2)->flat # rep(1:3, each=2)
$PDL1 = [1 1 2 2 3 3];
pdl> pdl(1..3)->(,*3)->flat # rep(1:3, times=3)
$PDL1 = [1 2 3 1 2 3 1 2 3];
pdl> pdl(1..3)->(*2,,*3)->flat # rep(1:3, each=2, times=3)
$PDL1 = [1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3];
pdl> rld(pdl(2,1,5),pdl(1..3)) # rep(1:3, c(2,1,5))
$PDL1 = [1 1 2 3 3 3 3 3];
pdl> sequence(13)->(0:12:3) # seq(0,12,3)
$PDL1 = [0 3 6 9 12];
ベクトル演算rld
を実行するために、ランレングス デコード コマンドを使用することに注意してください。rep
これらの種類のインデックスとディメンションの操作を使用して R ルーチンを実装するのは簡単です。また、上記は主に整数インデックス操作で機能します。浮動小数点数のサポートが必要な場合は、別のことを行う必要があります。
PDL::Basic
シーケンスのものとPDL::Slices
インデックス操作については参照してください(PDL::NiceSlice
上記で使用されている構文であるため、これも関連しています)。PDL シェルperldl
またはpdl2
.
PDL Web サイトはhttp://pdl.perl.orgにあります。PDL に関するさらなる議論については、perldl メーリング リストを使用して、PDL コミュニティ全体による迅速な対応をお願いします。