タグ付けされた質問 「data-structures」

5
数百万のデータポイントに対する最近傍計算の繰り返しが遅すぎる
3Dで数百万のデータポイントに走るデータセットがあります。私が行っている計算では、半径内の各データポイントの近傍(範囲検索)を計算し、関数をフィットさせ、フィットの誤差を計算し、次のデータポイントに対してこれを繰り返す必要があります。私のコードは正常に動作しますが、実行に非常に長い時間がかかり、データポイントごとに約1秒かかります!おそらく、各ポイントについて、データセット全体を検索する必要があるためです。プロセスを高速化する方法はありますか。どういうわけか、最初の隣人との間に何らかの隣接関係を確立できれば、これはそれほど遅くないという考えがあります。それが役立つ場合は、3Dで最適なParzenウィンドウ幅を見つけようとしています。

2
非構造化セル中心FVM CFDコードに適したデータ型は何ですか?
非構造化セルベースの有限体積CFDでのセルブラウジングの効率的なデータ構造に関するアドバイスに興味があります。 (ドルフィン cfdコードで)遭遇した1つの例は、このようになります(関連するセグメントを表示します) したがって、各セルの面の数が格納される配列NFacesがあります。次に、ローカルからセルへの面番号をグローバルな面番号にマップするCFace配列。\ begin {listing} do ip = 1、Ncel ... do j = 1、NFaces(ip) k = CFace(ip、j) ipp = Face(k)%cell1 inn = Face(k)%cell2 if(inn > 0)その後 !内部\ end {listing}\ begin {listing} do ip = 1、Ncel ... do j = 1、NFaces(ip)k = CFace(ip、j)ipp = Face(k)%cell1 inn = Face(k)%cell2 if(inn > …

2
有限ボリュームコードのデータ構造:配列とクラス
磁気流体力学(MHD)の有限ボリュームコードを記述する必要があります。以前に数値コードを書いたことがありますが、この規模ではありません。クラスでデータ構造(オブジェクト指向アプローチ)を使用するか、速度、スケーラビリティなどの点で異なるプロパティに複数の配列を使用するか、どちらが良い選択かを尋ねたかっただけです。Pythonでコードを記述し、数値的に集中的な部分にはfortranを使用します。 Pythonのクラスの例は次のようになります class Cell: def __init__(self, x, y, z, U): 配列は単純に次のように定義できます x[nx][ny][nz] y[nx][ny][nz] z[nx][ny][nz] U[nx][ny][nz] 等

1
科学計算におけるデータ構造のビットパッキングと圧縮
私は最近、この論文に出くわしました。この論文では、疎行列を表す際にメモリを節約する方法について説明しています。32ビット整数は、最大40億までの数値を格納できます。しかし、PDEを解くと、未知数の数が40億に近づくずっと前に、問題が並列化されて分割されました。彼らのアイデアは、帯域幅が狭い場合にマトリックスを並べ替えることです。j特定の行にすべてのゼロ以外の列のインデックスを格納するのではなく、並べ替えによって大きさが小さくなる傾向があるiオフセットを格納j - iします。オフセットは、32ビット整数よりも少ないビット数で保存できます。行列のゼロ以外のエントリを反復処理する場合は、より多くの計算を行う必要がありますが、キャッシュミスを少なくすることによる節約は、それを補う以上のミスをもたらします。では、この論文彼らは特に階層マトリックス形式で16ビットインデックスを使用することを検討していましたが、最終的には同様のアイデアです。ライブラリzfpもあります。これは、浮動小数点データを圧縮するためのものです。 現在「フロップは無料」であり、ボトルネックはメモリアクセスであるため、この種のトリックはCPUキャッシュをより有効に活用するために非常に有望であるように見えます。 私はこれら2つの論文の引用/引用のほとんどを精査しました。私は、ビットパッキングの有効性、スパース行列ベクトルの乗算、および計算科学の他の問題について、他の参考資料を探しています。たとえば、このアイデアを使用して、グラフや非構造化メッシュのデータ構造をはるかに効率的に設計できると思います。

2
3次元Delaunay三角形分割の適切なデータ構造とアルゴリズム
私は3Dデローニー三角形分割(E3のランダムポイント)の目標を達成するためにいくつかの貧弱なコードを作成しましたが、時間がかかり、5つのポイントが1つの球で正確に(または丸め誤差が原因で)ある場合、私のコードはこの状況を適切に処理できません。 四面体のリストと点のリスト、および四面体とその近傍との関係のリストである基本的なデータ構造を使用します。アルゴリズムはインクリメンタル挿入です。 誰かがどの種類のデータ構造とアルゴリズムを優先するべきか教えてもらえますか?クアッドエッジのデータ構造をこの状況で使用できますか?このトピックに関する論文を読んだとき、このデータ構造は3Dアプリケーションには適していない可能性があります(厳密に言えば、3Dマニホールドアプリケーションには適していませんか?分割統治はより良いアルゴリズムですか?ありがとう!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.