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

Posted

技术标签:

【中文标题】在 MATLAB 中序列化多维数组以进行数据库插入的最简单方法?【英文标题】:easiest way to serialize multi-dimensional array in MATLAB for database insertion? 【发布时间】:2011-10-22 04:01:43 【问题描述】:

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

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

【问题讨论】:

类似问题:Is it possible to intercept a matlab save() bytestream(很多有用的答案) 【参考方案1】:

一种可能性是使用 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 中检索这些值时,您可以使用逆过程将它们转换回双精度值,并将矩阵重塑为其原始大小:

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));

【讨论】:

其实FEX上的Serialize/Deserialize提交似乎是在做的,只是它处理更多的情况(包括结构和单元格的所有MATLAB数据类型)【参考方案2】:

我不确定我是否正确理解了您的问题,但您是否尝试过查看重塑功能?它将输入矩阵 A 重塑为 m × n 矩阵:

B = reshape(A,m,n);

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

MATLAB Documentation

【讨论】:

-1 本身没有帮助,如果您关心保留浮点数的精确精度,则不会

以上是关于在 MATLAB 中序列化多维数组以进行数据库插入的最简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab的多维数组操作

MATLAB中如何定义多维矩阵

将多维表单数据序列化为 JSON 对象数组以使用 application/json

redis怎么存数组和获取数组?

带字符串的Matlab多维数组+导出到Excel

将多维数组插入另一个多维数组