我仔细研究了这个主题,发现这个链接同时非常有用和简单。 Storing matrices in a relational database 但是,如果提到的方式是
,请你告诉我A B C D
E F G H
I J K L
[A B C D E F G H I J K L]
是将矩阵元素存储在数据库中的最佳,简单甚至可靠的方法。此外,我需要乘以两个矩阵并使操作动态化。那么数据的存储是否会为任务带来任何问题?
答案 0 :(得分:1)
在postgresql中,您实际上可以拥有多维数组,定义自己的类型并在这些类型上定义自己的函数。例如,人们可以这样做:
CREATE TABLE tictactoe (
squares integer[3][3]
);
有关如何创建自己的类型的信息,请参阅The PostgreSQL manual。
答案 1 :(得分:0)
我认为这在很大程度上取决于您希望如何在应用程序中使用矩阵。
数据库仅用于同一应用程序的持久性,速度是否重要,且大小无法提前知道?制作自己的序列化方案,并保存二进制blob。
用于在应用程序之间共享的数据库是否具有事先未知的大小?使用逗号分隔列表。
您是否关心数据完整性,类型安全性,并且想查询单个单元格?然后使用(row,col,cell value)模式。
您是否知道您的矩阵具有固定大小且相对较小,例如4X4转换矩阵,并且与数据库中的任何元素具有1对1的关系?然后你的表中实际上可以有16行,排成一行。
考虑一下您的用例,并进行实验!
答案 2 :(得分:0)
是将矩阵元素存储在数据库中的最佳,简单甚至可靠的方法。此外,我需要乘以两个矩阵并使操作动态化。那么数据的存储是否会为任务带来任何问题?
我首先要说这两种方法都是有效的,但第二种方法是不够的。您必须有一些其他信息,例如行的长度或每个元素的(row,col)索引,以将矩阵存储为一维数组。这通常用于稀疏矩阵,其中在对角线的任一侧聚集有大量零值。
将矩阵保存在数据库中并在内存中对其进行操作是两回事。
乘法需要(row,col)索引等任务。将矩阵存储为2D阵列意味着您将拥有它们,因此不需要其他信息。 1D阵列也需要这个信息,所以你必须提供它。
对于稀疏matricies,优势摆动到1D阵列。在这种情况下,您不必在带宽之外存储零值,但是加法和乘法等操作变得更加复杂。