2010-02-06 48 views
6

我经历了这个话题,发现这个链接相当有用和简单的同时。 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

是将矩阵元素存储在数据库中的最佳,简单或可靠的方式。此外,我需要乘以两个矩阵,并使操作动态。那么数据的存储会给这个任务带来什么问题?

我会开始说这两种方法都是有效的,但第二种方法是不够的,因为你写的。你必须有一些其他的信息,比如每行元素的行长或者(行,列)索引来存储矩阵作为一维数组。这通常用于稀疏矩阵,其中在对角线的任一侧上存在大量围绕值的零点。

在数据库中坚持矩阵并在内存中对其进行操作是两件不同的事情。

像乘法这样的任务需要(行,列)索引。将矩阵存储为二维数组意味着您将拥有它们,因此不需要其他信息。一维数组也需要这些信息,所以你必须提供它。

优势摆动到稀疏矩阵的一维数组。在这种情况下,您不必在带宽之外存储零值,但是像加法和乘法这样的操作对于编码来说变得更加复杂。

0

我认为这很大程度上取决于你想如何在你的应用程序中使用矩阵。

数据库仅用于同一应用程序的持久性,速度很重要,并且事先无法知道大小?制作你自己的序列化方案,并保存二进制blob。

是否在应用程序之间共享数据库,但事先不知道大小?使用逗号分隔列表。

您是否关心数据完整性,类型安全性以及想要查询单个单元格?然后使用(row,col,单元格值)架构。

你知道你的矩阵是固定的大小和相对较小的,例如4X4变换矩阵,并且与数据库中的任何元素都有1对1的关系吗?那么你实际上可以在你的桌子上放16行,排成一行。

想想你的使用案例和实验!

1

在postgresql中,您实际上可以拥有多维数组,定义您自己的类型并在这些类型上定义您自己的函数。例如,一个可以简单地这样做:

CREATE TABLE tictactoe (
    squares integer[3][3] 
); 

关于如何创建自己的类型信息,请参阅The PostgreSQL manual