在 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
现在您可以将b
和b_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 中序列化多维数组以进行数据库插入的最简单方法?的主要内容,如果未能解决你的问题,请参考以下文章