簡體   English   中英

從.mat v7.3到從Matlab 2016導入到Mathematica 11更好的數據格式?

[英]Better dataformat than .mat v7.3 for import from Matlab 2016 to Mathematica 11?

我正在嘗試使用本地存儲將數據從Matlab 2016a / 2016b-prerelease導入到Mathematica 11

  • 最好的完整文檔
  • 可擴展至二進制的大數據; 現在,有1-100 GB,但稍后需要TB
  • 從Mathematica 11轉換為Matlab 2016-如果數據格式可以是雙射也是一個加號; 因此了解如何在Matlab 2016a / b和Mathematica 11中讀取數據格式
  • ...

數據和質量保證

  • 完整數據是xy平面,它具有650 000 x 650 000點,因此尺寸約為方矩陣。
  • 取數據的任何子集,例如6500 x 6500。
  • 保存數據文件和.tiff圖像。

腳步

  1. 指定任何測試數據(呈現2D圖像),並指定.tif文件名和datafile文件
  2. 保證您獲得.tif數字的質量保證
  3. 以您選擇的數據格式存儲數據
  4. 保證您可以將數據文件重新加載回Matlab
  5. 在Mathematica中導入數據文件
  6. 在Mathematica中打開/處理數據文件

差分解決方案

  1. Matlab v7.3面臨的挑戰

  2. 自動方法的挑戰

  3. Matlab的v7 .mat相對於v7.3已棄用

  4. Matlab的v5和v4 .mat-我認為v7.3已過時

我針對差異條件的工作流程的嘗試(1)

一些規范:將數據文件指定為v7.3的.mat文件

嘗試1

  • Matlab的

     # Specify test data here time=0:0.001:1; potential=sin(time); C = spectrogram(potential); C=reshape(C,1,[]); C=nthroot( abs( C(1,1:1001) ), 1); hFig=figure(); hax=axes(hFig); imagesc(time,potential,C); filename=fullfile('/home/masi/Images/test'); filenameMat=fullfile('/home/masi/Images/test.mat'); export_fig(filename, '-tif', '-q101', '-a1', '-m1', '-RGB', '-nofontswap', '-nocrop', '-transparent', '-dpng', hax); save(filenameMat,'time', 'potential', 'C', '-v7.3'); 
  • Mathematica,其中#1-2都成功導入了許多變量

     (* http://mathgis.blogspot.fi/2010/09/tips-import-matlab-mat-files.html *) (* https://mathematica.stackexchange.com/a/10589/9815 *) (* #1 Succeeds; select specific data sets *) mma = Import["~/Images/test.mat", {"HDF5", "Datasets", "/time"}]; (* #2 Succeeds: Out {"/C", "/potential", "/time"} *) mma = Import["~/Images/test.mat", {"HDF5", "Datasets"}]; (* Output: {{1.}, {1.5}, {2.}} *) 
  • 輸出:在Mathematica 11中,步驟(1-4)成功,但是數據文件(步驟5)的導入失敗,請參見上面的錯誤消息。

在Mathematica中讀取數據,其中Flatten用於刪除一組括號,因為其中一組過多

(* https://stackoverflow.com/a/16834090/54964 *)
SetDirectory["Desktop"]
a = Import["m.mat"] ;
(* https://mathematica.stackexchange.com/a/97252/9815 *)
a=Partition[Flatten[a], 5000]

(* Output fails: {} *)

學習agentp的答案

他只是在使用一個正方形矩陣。 我將數據包含在三個變量中: timepotentialC ,擬合imagesc()的參數。

  1. 向量的平方矩陣的時間為 mx 1且電勢為 nx1。如何在平方矩陣A中應用向量C 我對這里的數學理解不足,無法自己回答問題。

     # time's dimensions mx 1 # (potential')'s dimensions 1 xn time=0:0.001:1; potential=sin(time); A = time' * potential; # Output: A is mxn matrix, which is as as expected. # C is vector 1 xm here. C = spectrogram(potential); C=reshape(C,1,[]); C=nthroot( abs( C(1,1:1001) ), 1); 
  2. 如何將方陣A(C)轉換回這三個變量? -( A)關於平方矩陣,其中向量C已應用於平方矩陣A。 我不了解創建結果的背后的數學原理。

  3. 您如何將這些數據分開作為一個二進制文件? --可能無法實現,但我想了解當前的標准。

Matlab:2016a,2016b預發布
Mathematica:11
操作系統:Debian 8.5
相關: 有沒有一種方法可以將結果或數據從Matlab自動導入到Mathematica?

從matlab到mathematica交換原始二進制文件的示例:

Matlab的:

mat = [ pi 2*pi 3*pi ; 1 sqrt(2)  sqrt(3)  ]
f=fopen('out.bin','w')
fwrite(f,size(mat))
fwrite(f,mat,'double')
... # repeat for however many matrices we need to write
fwrite(f,size(mat2))
fwrite(f,mat2,'double')
...
fclose(f)

數學:

f = OpenRead["out.bin",   BinaryFormat -> True];
size = BinaryReadList[f, "Integer8", 2];
mat = Transpose@ArrayReshape[
         BinaryReadList[f, "Real64",Times@@size],
         Reverse@size];
(* repeat as needed to read multiple matrices *)
Close[f];
MatrixForm@mat

在此處輸入圖片說明

請注意,需要ReverseTranspose ,因為matlab以列主要順序寫入數據。 您可以在編寫時交替執行fwrite(f,transpose(mat),'double')

請注意,這也假定為正方形陣列。 如果要處理多維數組,則還需要將length(size)寫入文件,依此類推。

為了完整起見,請像這樣返回:

f = OpenWrite["out.bin",  BinaryFormat -> True];
BinaryWrite[f, Dimensions[mat], "Integer8"];
BinaryWrite[f, Transpose[mat], "Real64"];
Close[f]

..

f=fopen('out.bin','r')
sz=transpose(fread(f,2))
mat=fread(f,sz,'double')
fclose(f)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM