Одна из возможностей - использовать функцию 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
Далее, когда вы извлекаете эти значения из БД, вы можете преобразовать их обратно в двойные значения, используя обратную процедуру, и изменить матрицу до ее исходного размера:
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));