私はデータをシリアライズするための標準関数を見つけることができないようです。私は単一のデータベースフィールドに格納する必要がある大きな128x51配列を持っています。何らかの種類のシリアライズがなければ、問題が発生します。データベース挿入用の多次元配列をMATLABでシリアル化する最も簡単な方法は?
これを解決するにはどうすればよいですか?私はかなり多くの標準的な手順に精通していないので、私はかなり多くのMATLABを使用していません...
私はデータをシリアライズするための標準関数を見つけることができないようです。私は単一のデータベースフィールドに格納する必要がある大きな128x51配列を持っています。何らかの種類のシリアライズがなければ、問題が発生します。データベース挿入用の多次元配列をMATLABでシリアル化する最も簡単な方法は?
これを解決するにはどうすればよいですか?私はかなり多くの標準的な手順に精通していないので、私はかなり多くのMATLABを使用していません...
一つの可能性(のみフル、非複合数値のために働く)UINT8バイトに数値を変換するTYPECAST関数を使用することです。マトリックス前シリアライゼーションにベクターに再形成する必要があり、したがってそのサイズも(同じプロセスを使用して、あるいはシリアライズ)別々に保存されなければならないこと
注
%# 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));
実際、FEXの[Serialize/Deserialize](http://www.mathworks.com/matlabcentral/fileexchange/29457)の提出が行われているようで、より多くのケースのみを処理します(構造体とセルを含むすべてのMATLABデータ型) – Amro
私はあなたの質問を正しく把握しているかどうかは分かりませんが、もし1にMを設定した場合
B = reshape(A,m,n);
、及びN(* 51 128)には、データを '直列化' されている:それは、m行n列のマトリックスに入力行列Aを整形します。
-1それはあなた自身の助けにはならない、あなたがpについて気にしないなら浮動小数点数を正確に予約する – Amro
同様の質問:[それは)(保存MathWorks社のMATLABを傍受することは可能ですバイトストリーム](http://stackoverflow.com/questions/4807035/is-it-possible-to-intercept-a -matlab-save-bytestream)(有用な答えの多く) – Amro