簡體   English   中英

協方差矩陣的數據庫設計(恆定大小,對角線對稱)

[英]Database Design for Covariance Matrix (constant size, diagonally symmetric)

我是關系數據庫設計領域的新手,並且正在嘗試在表中存儲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矩陣。

從我的研究中,我發現了一種規范化的表設計,即創建一個具有行號,列號和值( 如何在數據庫中表示二維數據矩陣 )的字段的表。 我可以看到,這樣做的好處是靈活性,因為行和列的數量是可變的。 即使我有一定數量的行和列(9x9和/或6x6),這也是最好的方法嗎? 我還可以設想創建一個表,其中包含每個唯一行/列組合(PosXPosX,PosXPosY等)的字段。 對我來說,這似乎更直觀,但就像我說的那樣,我是新手。

我的問題是:您如何建議在關系數據庫中表示我的數據? 我概述了兩種可能的方法,但我不知道這兩種方法是否是最佳方法。 在我看來,“最佳”意味着有效地存儲和檢索。 我創建的實際上是一個數據存儲庫,因此數據庫中的數據一旦添加就不會更改,只會讀入numpy數組或類似內容。

更多背景:
我正在分析測試數據。 我有多個具有不同配置的測試運行,每個配置都有多個數據點,其中包括許多不同種類的數據。 我要存儲和分析的數據點之一是協方差。 我正在處理的數據量非常龐大,因此我希望使用數據庫可以幫助我保持事物的組織性和可訪問性。 目的是存儲所有這些數據,然后編寫將從數據中提取數據的數據分析和可視化工具。 在協方差的情況下,我正在計算馬氏距離,跡線和時間傳播的特征值之類的東西。 我已經有很多這樣的工具,但是它們目前是從許多不同的日志文件中提取的,並且通常是一團糟。

數據庫擅長存儲數量驚人的數據。 好像您想使用它們來快速,清晰,輕松地存儲和檢索您的信息(如果不執行實際計算)。 如果是這樣,那么您將需要設計存儲以進行有效的檢索。

行和列的字段(表列)似乎是必須的。 您需要確保永遠不要添加大於矩陣大小的值(沒有行/列超過6或9)。 您可以在RDBMS中執行一些技巧,以確保這不會發生,但它們可能會讓人感到困惑。

您將找到一個附加字段,用於唯一標識存儲哪些數據集至關重要。 在該列的表上建立索引,從數百萬個中檢索一組36個或81個值將非常快。

您的第二個想法(每個觀察結果一行)也可以工作。 他們要考慮的關鍵是:將如何使用數據? 從長遠來看,什么是最有效或最能滿足您的目標的?

只要您的數據集很小,並且您可以假定一次讀取的值將不會被外部應用程序修改,則可能值得考慮使用csv文件,然后將數據讀取到最有用的數據結構中在進行分析時。 這也將使您稍微更輕松地查看數據,因為您只需要一個文本編輯器,或者您想要一種以電子表格形式查看它的方法。

根據您所說的,似乎最干凈的方法是每個單元具有一個記錄,因為這將為您將來提供最大的靈活性。 如果您有興趣閱讀有關數據庫設計的文章,那么這是一個很好的起點

一種可能的設計可能是:

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

其中record_id唯一地標識一條記錄,parent_id是對該矩陣的擁有實體的引用,matrix_id唯一地標識矩陣中的元素,x和y是該記錄的坐標,值是單元格值。

然后查詢可能類似於:

select * 
    from matrix
where matrix_id=?
order by x asc, y asc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM