Самый простой способ сериализации многомерного массива в MATLAB для вставки базы данных? - PullRequest
3 голосов
/ 22 октября 2011

Я не могу найти никаких стандартных функций для сериализации данных. У меня есть большой массив 128x51, который мне нужно хранить в одном поле базы данных. Без какой-либо сериализации все будет проблематично.

Какой лучший способ решить эту проблему? Я не очень часто использую matlab, поэтому я не знаком со стандартными процедурами ...

Ответы [ 2 ]

4 голосов
/ 22 октября 2011

Одна из возможностей - использовать функцию 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));
0 голосов
/ 22 октября 2011

Я не уверен, правильно ли я понял ваш вопрос, но вы пытались взглянуть на функцию изменения формы? Он преобразует входную матрицу A в матрицу m на n:

B = reshape(A,m,n);

если вы установите m на 1, а n на (128 * 51), вы «сериализуете» данные.

Документация MATLAB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...