問題タブ [pdl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - perl/pdl でスレッドを使用してサブルーチンのループを置き換える方法
perl モジュールの一部として完全に優れた perl サブルーチンを作成しました。あまり詳細には触れずに、文字列と短いリストを引数として (端末から取得することが多い) 取り、値を吐き出します (現在、常に浮動小数点ですが、常にそうであるとは限りません)。
現在、引数のリスト部分は 2 つの値、たとえば (val1,val2) を取ります。for ループを使用して、val1 と val2 の何百もの異なる値のサブルーチンの出力を保存します。各反復が完了するまでにほぼ 1 秒かかるため、このプロセス全体を完了するには数時間かかります。
私は最近、「スレッド化」と呼ばれる神秘的な (私にとって) 計算ツールについて読みました。これは明らかに for ループを非常に高速な実行時間に置き換えることができます。これらが何なのか、何をするのか理解に苦しんでいますが、並列コンピューティングと関係があるのではないかと思います (また、並列プロセッサ用にモジュールを可能な限り最適化したいと考えています)。
val1 に渡したいすべての値をリストとして保存する場合、たとえば @val1 と val2 についても同様にすると、これらの「スレッド」を使用して、val1 と val2 の要素のすべての組み合わせに対してサブルーチンを実行するにはどうすればよいでしょうか? また、この手順を val3、val4 なども受け取るサブルーチンに一般化する方法を知っておくと役立ちます。
perl - 参照渡しのサブルーチンで PDL rcols を使用するにはどうすればよいですか?
具体的には、PERLCOLS オプションで rcols を使用したいと考えています。
これが私がやりたいことです:
を使用すればできます\@array
が、下位互換性のために、これを実行しないことをお勧めします。配列参照参照を使用してそれを行う方法は次のとおりです。
しかし、配列参照を引数として受け取るサブルーチンを作成する方法がわかりません@$aref = @{$read[-1]}
。これは、各要素を個別にコピーします。
PS:PDL::IO::Misc
ドキュメントを読むと、perl の配列はそうあるべきだと思われます$read[0]
が、そうではありません。
PERLCOLS - ピドルではなく perl 配列に読み込まれる列番号の配列。読み取る列の明示的なリストで指定されていない列は、明示的な列の後に返されます。(デフォルト B)。
x86_64-linux-thread-multi用に構築されたPerl v5.10.0でPDL v2.4.4_05を使用しています
perl - pdl2 (または Devel::REPL) の perl デバッガー 'x' に相当するものはありますか?
私はpdl2
(PDL
シェル) をデフォルトの Perl インタラクティブ シェルとしても使用しています ( Devel::REPL
. しかし、x
ダンパー印刷エイリアスがありません。p
ピドルには適していますが、通常の配列参照またはハッシュ参照には機能しません。ロードしましたが、深さを制御する簡単な方法がありません。たとえば、複雑なデータ構造に対して、Data::Dumper
深さの制限をすばやく設定できる方法が気に入っています。しかし、プロセスはより面倒です:x
x 2 $deep_datastruct
Data::Dumper
Perlデバッガーでは、同じことをx 1 $c
直接実行できます。pdl2
似たような簡潔なものはありますか?
[更新]
そして、この質問に関連して: Perl デバッガー コマンドのような便利な機能がありますpdl2
か? または、モジュールを作成してエクスポートする必要がありますか? Perl デバッガーの代わりに実際の REPL を対話型シェルとして使用したいのですが、それでも Perl デバッガーには、または.Devel::REPL
m
y
PadWalker
Devel::REPL
pdl2
たとえば、すべての変数を表示するには ( pdl2
piddles のみを表示):
ところで、誰かがDevel::REPL
使用中のすべての変数を一覧表示するためのプラグイン (y
デバッガーのように、値ではなく名前のみ) を知っていて、必要x
なものをダンプする -like を持っていますか?
perl - Perl PDL ピドルを繰り返す方法は?
私が得た最も近いものは次のようなものでした
また、[1,2,3,4]
piddle$u
に変換できるので、 からリスト (またはマトリックスのリストのリスト) を取得できます$u
か?
perl - Perl Inline::C 失敗時に pdl または 0 を返す
カメラに接続し、写真を撮り、データをピドルに読み込むモジュールを構築しています。これらはすべて Inline::C コマンドで行われます。PDL ドキュメントの手順を使用して、を作成しpdl *
て返すことができます。ただし、カメラが写真を撮れない可能性があります。その場合は0
、通常の約束に従って返品したいと思いmy $pic_pdl = $Camera->TakePicture or die "Failed to take image"
ます。これは、メカニズムを使用する必要があることを意味しているようInline_Stack_Push
ですが、 を に適切に変換する方法がわかりませpdl *
んSV*
。また、できれば$!
エラーコードもセットしたいです。これはインラインで実行できますか?
perl - PDL を属性として持つ Moose オブジェクトを保存する
私は Moose を初めて使用し、PDL をプロパティとして使用して問題が発生するまでは非常にうまくやっています。オブジェクトをファイルに書き込めるようにしたい (私は を使用しておりuse MooseX::Storage; with Storage('io' => 'StorableFile');
、このオブジェクトはPDL
属性として を持っています。この方法でPDL::IO::Storable
使用するために必要なメソッドを提供しますがStorable
、これを行う方法がわかりませんムース。
これは例です。少し長いことはわかっていますが、できる限り最小限に抑えています。
PDL 型を作成するか、PDL を何かにラップする必要があるかもしれませんが (を使用してMooseX::NonMoose::InsideOut
)、おそらく誰かがそれから私を救うことができます (または、正しい道があればそれを教えてくれます)。
perl - ハッシュに格納された AoA で動作します。PDL と PDL なし
私はAoAのハッシュを持っています:
次のようにクランチする必要があります。
2 つの配列間の二乗加重差を計算します。私のハッシュは大きいので、PDL が計算の高速化に役立つことを期待していましたが、何らかの理由でそうではありません。私はまだPDLに慣れていないので、おそらく何かを台無しにしています。以下の PDL を使用したスクリプトは、最大 10 倍遅くなります。説明: 次の 2 つのスクリプトは、私のプログラムで何が起こっているかを簡単に表現しようとしたものです。いくつかの参照値をハッシュに読み込み、(その場でハッシュに取り込まれた) 観測値とそれらの値を重み付けして何度も比較します。スクリプトでは、参照配列、重み、観測配列を任意の固定値に設定しましたが、実行時にはそうではありません。
PDL を使用しない場合と使用する場合の 2 つの単純なスクリプトを次に示します。
PDLなし
PDL付き
perl - pdl2シェルにコメント行を追加する方法
インタラクティブなperlpdlシェルであるpdl2を使用していますが、後でインタラクティブセッションを確認できるように、次のコード行を文書化するためにコメントを行に追加したいと思います。
pdl2シェルにコメントを追加することは可能ですか?
PS:評判が1500の人はpdl2タグを追加できますか?
[アップデート]
OK、「#」は確かに私が思ったようにコメントの印章ですが、前にsp(またはsemething)を入れない限り、#で行を始めることはできないようです。?!それは「機能」ですか?
perl - Perl pdl2 シェルからコマンドの完全な履歴を取得できますか (bash の履歴と同様)?
pdl2 シェルを使用していますが、すべてのコマンド履歴を一覧表示するにはどうすればよいですか?
perl - pdlでシーケンスを作成するには?
R コードの一部を pdl を使用して perl に変換しようとしていますが、pdl にシーケンスを作成するための構文があるかどうかを知りたいです (些細な my $xx=pdl(1..20) 以外に)。
ベクトル ['a','b'] rep 20 => a,b,a,b,a,b.... 20 回のようなものですか?
[編集]: 基本的な繰り返しは通常の Perl 繰り返し文字列x
演算子で実行できますが、R で rep() や seq() のようなものを探しています: