我似乎无法找到任何用于序列化数据的标准函数。我有一个需要存储在单个数据库字段中的大型128x51阵列。没有某种序列化,事情就会出问题。
解决这个问题的最佳方法是什么?我没有那么多使用matlab,所以我不熟悉标准程序......
答案 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
现在您可以将b
和b_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),则表示您正在“序列化”数据。