0

私はリレーショナル データベース設計の分野にかなり慣れていないので、9x9 の共分散行列をテーブルに格納しようとしています。行と列は、位置、速度、および加速度の x、y、z 項です。そのようです:

        PosX PosY PosZ . . . AccZ
      -------------------------
PosX  |  XX   XY   XZ  . . .
PosY  |  YX   YY   YZ  . . . 
PosZ  |  ZX   ZY   ZZ  . . . 
.     |  .    .    .
.     |  .    .    .
.     |  .    .    .
AccZ  |

たとえば、左上の要素は PosXPosX (上記の XX に短縮) であり、右側の要素は PosXPosY などです。行列は対角線に沿って対称です (つまり、PosXPosY == PosYPosX)。この同じテーブルに位置と速度のみを含む 6x6 マトリックスを保存することもできます。

私の研究から、行番号、列番号、および値のフィールドを持つテーブルを作成する正規化されたテーブル設計を見つけました (データベースで 2-D データ マトリックスを表す方法)。行数と列数を可変にできるため、この利点は柔軟性にあることがわかります。行と列の数 (9x9 および/または 6x6) を設定していますが、これが最善の方法ですか? 行と列の一意の組み合わせ (PosXPosX、PosXPosY など) ごとにフィールドを持つテーブルを作成することも考えられます。それは私にとってより直感的に思えますが、私が言ったように、私はこれが初めてです。

私の質問は、私のデータをリレーショナル データベースでどのように表現することをお勧めしますか? 考えられる 2 つの方法を概説しましたが、どちらが最善の方法かはわかりません。私の場合の「最良」とは、効率的に保存および取得することを意味します。私が作成しているのは実際にはデータリポジトリであるため、データベース内のデータは追加されると変更されず、numpy 配列などに読み込まれるだけです。

もう少し背景:
テストデータを分析しています。さまざまな構成で複数のテストを実行しており、それぞれにさまざまな種類のデータを含む複数のデータ ポイントがあります。保存して分析したいデータ ポイントの 1 つは共分散です。私が扱っているデータの量は非常に膨大なので、データベースを使用することで物事を整理してアクセスできるようになることを願っています。目標は、このすべてのデータを保存し、データから引き出すデータ分析および視覚化ツールを作成することです。共分散の場合、マハラノビス距離、トレース、時間伝搬固有値などを計算しています。私はすでにこれらのツールをたくさん持っていますが、現在それらは多くの異なるログ ファイルから取得しており、一般的に混乱しています。

4

2 に答える 2

0

データセットが小さく、一度読み取った値が外部アプリケーションによって変更されないと想定できる限り、csv ファイルの使用を検討する価値があるかもしれません。最も有用なデータ構造にデータを読み取るだけです。分析を行っている間。これにより、テキスト エディターのみが必要になる場合や、スプレッドシートとして表示する方法が必要な場合に、データを少し簡単に確認することもできます。

あなたが言ったことに基づいて、セルごとに1つのレコードを持つことが最もきれいなことのようです。これにより、将来的に最も柔軟性が得られるからです。データベース設計について読むことに興味があるなら、これはかなり良い出発点です

考えられる設計の 1 つは次のとおりです。

table matrix(record_id, parent_id, matrix_id, x, y, value) 

ここで、record_id はレコードを一意に識別し、parent_id はこのマトリックスの所有エンティティへの参照です。matrix_id はマトリックス内の要素を一意に識別します。x と y はレコードの座標であり、value はセル値です。

次に、クエリは次のようになります。

select * 
    from matrix
where matrix_id=?
order by x asc, y asc
于 2012-06-04T18:35:16.950 に答える
0

データベースは、膨大な量のデータを格納するのに優れています。実際の計算を実行しない場合でも、それらを使用して、情報をすばやく、明確に、簡単に保存および取得したいと思うようです。その場合は、効率的に検索できるようにストレージを設計する必要があります。

行と列のフィールド (テーブルの列) は必須のようです。行列のサイズよりも大きな値を追加しないようにする必要があります (6 または 9 を超える行/列はありません)。これが決して起こらないようにするために RDBMS 内で実行できるトリックがありますが、それらは一種の厄介なものになる可能性があります。

どのデータセットが不可欠に保存されているかを一意に識別するための追加フィールドがあります。その列のテーブルにインデックスを作成すると、数百万から 36 または 81 の値のセットを 1 つ取得するのが非常に高速になります。

2 番目のアイデア (観測ごとに 1 行) も機能する可能性があります。考慮すべき重要なことは、データをどのように使用するかということです。長期的に見て、何が最も効率的で、目標を達成するのに最も適していますか?

于 2012-06-04T18:19:18.947 に答える