問題タブ [repa]

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.

0 投票する
1 に答える
415 参照

arrays - 制限されたデータ型によってインデックス付けされた配列を修復しますか?

標準配列パッケージの境界付き配列に似たものを実現したいのですが、repa 配列を使用します。

これを達成するための素晴らしくきれいな方法は何ですか?

これは私が試したものですが、境界をチェックするカスタム関数ですべてをラップするよりも良い方法があるはずです:

また、(sh :. C) の Shape インスタンスを派生させようとしましたが、役に立ちませんでした。データ型の Shape クラスで宣言されたインターフェイスのいくつかを実装する方法について、頭を悩ませることができません。他の誰かに道があることを願って質問を書いていますが、そうでない場合はもう一度やり直します。ありがとうございました!

0 投票する
0 に答える
191 参照

haskell - Repa と Stencil を使用したリサンプリング

私は repa を使用して単純な画像双一次リサンプリング アルゴリズムを作成しましたが、分割された配列を使用して正しくする必要があるため、完全に独り占めしてステンシルも使用し、ループが高速になることを願っています。

mapStencil がどのように機能するかについての私の素朴な理解からすると、私の仕事には十分ではないと思います。transformStencil のようなものが必要です。別のステンシルが必要になると思うので、古いインデックスと新しいインデックスを使用できます。

Repa でステンシル画像のリサンプリングを実行する簡単な方法はありますか? そうでない場合、mapStencil を transformStencil または同等のものにハックするのはどれほど難しいでしょうか。

0 投票する
1 に答える
224 参照

haskell - Haskell のコアから重複したブランチを持つ「ケース」を削除する

次のような Haskell コードがあります。

ZRepaライブラリから:.取得され、次のように定義されます。

式 right of$は配列インデックスを定義し、 whilefはそのインデックスを取得してペアを返す関数です。これは、次のコアにコンパイルされます。

私には># x_s32E 0、両方のブランチが同一であるため、中間ケースのステートメント (精査対象としてのもの) が冗長であることは明らかです (おそらく間違っています)。それを取り除くために私にできることはありますか?Repa ドキュメントで推奨されている GHC オプションを使用してコードをコンパイルします: -O2 -Odph -fno-liberate-case -funfolding-use-threshold1000 -funfolding-keeness-factor1000

0 投票する
1 に答える
700 参照

haskell - repa で画像ヒストグラムを計算する

を使用して、ディスクから RGB イメージをロードしていJuicyPixels-repaます。残念ながら、画像の配列表現はArray F DIM3 Word8、内側の次元が RGB ピクセルである場所です。これrepaは、RGB 画像がArray U DIM2 (Word8, Word8, Word8).

画像の RGB ヒストグラムを計算したいので、シグネチャを使用して関数を検索しています。

各カラーチャネルの 1 次元配列を取得するために 3 次元配列を折りたたむにはどうすればよいですか?

編集:

DIM3主な問題は、各チャネルを からに変換できないことではありませんDIM2(スライスで簡単に実行できます)。問題は、ソース イメージを反復処理するDIM2異なる範囲の配列DIM3に蓄積する必要があることです。したがって、次元を1つ減らすため、repa'sは使用できませんが、同じ程度です。DIM1Shape (Z:.256) foldS

私も実験しましtraverseたが、ソース画像からピクセルを取得する関数を提供して、宛先画像の範囲を反復処理します。これは、各カラー値に対して同じピクセルをカウントする非常に非効率的なコードにつながります。

良い方法はVector、アキュムレータとしてヒストグラム タイプを使用して を単純に折りたたむことですが、残念ながら、効率的に を取得できる (ボックス化されていないU) またはV(ベクトル) ベースの配列がありませんVector。私はArray F(外部ポインタ)を持っています。

0 投票する
1 に答える
766 参照

haskell - Haskell と Repa を使用してローグライク ダンジョンを動的に生成する

ここにある同様の質問

Haskell で書かれたローグライク ゲームに取り組んでいます。を使用して世界を 2D グリッドとして表現することにしましたData.Array.Repa。今度は、まっすぐまたは 90 度回転する廊下と、(ほぼ) 任意のサイズと形状の部屋を含むランダムなダンジョンを動的に生成したいと考えています。

これらのダンジョンを生成するための戦略を理解するのに苦労しています. 酔っぱらいの散歩はうまくいくかもしれませんが、あまりにも不安定で、多くの部屋を生成しないようです. ダンジョンを生成するためのより良いアプローチは何ですか?

また、Data.Array.Repaここで使用するデータ構造の適切な選択はありますか?

0 投票する
2 に答える
1376 参照

arrays - Haskell repa - 配列を減らしてインデックスを返す方法は?

GNU Octave では、このコード -

最小要素とその場所を返します。任意のバイナリ関数の repa でこれをどのように行いますか?

これは私が思いついたものです:

上記の例では、repa 1D マトリックスをリストに変換し、foldl' (Data.List から) を 2 つのアキュムレータで使用します。しかし、repa を使用するポイントは、リストではなく配列を使用することです。

repa には、配列型 (foldS と foldP) の 2 つのフォールドがありますが、それらは (a -> a -> a) 型の関数しか使用できません。つまり、アキュムレータを含むタプルをそれに渡すことはできません。traverse もあります。これは、原則として、1D 配列をスカラー配列に縮小できます。

最初に頭に浮かぶのは

ただし、これにより、配列で計算を行う代わりに、配列もリストに変換されます。

0 投票する
2 に答える
126 参照

haskell - 型変数を異なる型と統合できるようにするにはどうすればよいですか?

次の型アノテーションを持つ関数があります

ArrayUおよびRepaライブラリDIM1から取得されます。後でタプルとして他の関数に渡されるデータを作成します。ある時点で型変数は型と統合されますが(これもRepaからのものです)、後で型と統合する必要があります(これは私の型です)。問題は、それがすでに統合されているため、と統合できないことです。エラーが発生します。これは何らかの形の上位タイプで解決する必要があると思いますが、これをどのように書くべきかわかりません。誰か私に手を貸してもらえますか?dataLatrDrLDLCouldn't match expected type

0 投票する
2 に答える
507 参照

haskell - Repa のパフォーマンスとリスト

Numeric Haskell Repa Tutorial Wikiには、(文脈のために) 次のような一節があります。

10.1 Fusion と、それが必要な理由

Repa は、高速なコードを実現するために配列融合に大きく依存しています。フュージョンは、GHC がプログラムをコンパイルするときに実行するインライン化とコード変換の組み合わせの凝った名前です。フュージョン プロセスは、Repa ライブラリで定義された配列充填ループを、独自のモジュールで記述した「ワーカー」関数とマージします。融合プロセスが失敗した場合、結果のプログラムは必要以上に遅くなり、多くの場合、単純な Haskell リストを使用した同等のプログラムよりも 10 倍遅くなります。一方、フュージョンが機能する場合、結果として得られるコードは、同等にきれいに記述された C プログラムと同じくらい高速に実行されます。何が起こっているのかを理解すれば、フュージョンを機能させるのは難しくありません。

私が理解していない部分はこれです:

「融合プロセスが失敗した場合、結果のプログラムは必要以上に遅くなり、多くの場合、単純な Haskell リストを使用した同等のプログラムよりも 10 倍遅くなります。」

ストリーム フュージョンが失敗した場合に実行が遅くなる理由は理解できますが、なぜリストよりも実行が遅くなるのでしょうか?

ありがとう!

0 投票する
1 に答える
2244 参照

arrays - Repa 並列配列を使用した慣用的なオプションの価格設定とリスク

有限差分法と repa を使用してコール オプションの価格を設定したい場合、次のようにします。

しかし、オプションの価格を並行して設定したい場合 (たとえば、スポット ラダーを実行する場合) は、次のようにすることができます。

質問:

  1. レパでこれを行うより慣用的な方法はありますか?
  2. 上記の方法は実際に並行して価格設定されますか?
  3. コードが実際に並列実行されるものを生成しているかどうかを判断するにはどうすればよいですか?

私はこれを 3 で試しましたが、悲しいことに ghc でバグに遭遇しました:

0 投票する
1 に答える
634 参照

haskell - Repaのインポート方法

私はHaskellの世界に本当に慣れていないので、愚かな質問を許してください. Haskell Platform をインストールし、実行cabal install repaして、WinGHCi でこのコードを含むファイルを読み込もうとしました

しかし、私はこれを取得します:

モジュールが見つからないという問題を解決する方法を教えてください。どうもありがとうございました!