在MATLAB中序列化多维数组以便插入数据库的最简单方法?

时间:2011-10-22 04:01:44

标签: matlab serialization

我似乎无法找到任何用于序列化数据的标准函数。我有一个需要存储在单个数据库字段中的大型128x51阵列。没有某种序列化,事情就会出问题。

解决这个问题的最佳方法是什么?我没有那么多使用matlab,所以我不熟悉标准程序......

2 个答案:

答案 0 :(得分:4)

一种可能性是使用TYPECAST函数将数值转换为UINT8字节(仅适用于完整的非复数数值)。

请注意,在序列化之前必须将矩阵重新整形为向量,因此其大小也必须单独存储(甚至使用相同的过程进行序列化):

%# sample matrix
M = rand(3,4);

%# convert
b_sz = typecast(size(M),'uint8');   %# serialized matrix size
b = typecast(M(:),'uint8');         %# serialized vector

现在您可以将bb_sz作为字节序列存储到数据库中([0,255]范围内的整数)

>> whos b b_sz
  Name       Size            Bytes  Class    Attributes

  b         96x1                96  uint8              
  b_sz      16x1                16  uint8          

接下来,当您从DB检索这些值时,可以使用逆过程将它们转换回double值,并将矩阵重新整形为原始大小:

MM = reshape(typecast(b,'double'), typecast(b_sz,'double'));

%# compare against original matrix
isequal(M,MM)

或者,如果您的数据库不支持数组类型,您只需将字节序列转换为字符串,并将其存储在VARCHAR类型的字段中:

%# as string
str = sprintf('%d ',b);

%# recover bytes from string
b = uint8(str2num(str));

答案 1 :(得分:-2)

我不确定我是否正确地抓住了你的问题,但你是否试过看重塑功能?它将输入矩阵A重新整形为m×n矩阵:

B = reshape(A,m,n);

如果将m设置为1,将n设置为(128 * 51),则表示您正在“序列化”数据。

MATLAB Documentation