从 Matlab 2016 导入到 Mathematica 11 的数据格式比 .mat v7.3 更好?
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
中的数据格式
- ...
数据和质量保证
- 完整数据是 x-y 平面,它有 650 000 x 650 000 个点,所以维度大约是一个方阵。
- 以数据的任何子集等 6500 x 6500 为例。
- 保存数据文件和.tiff 图像。
步数
- 指定任何测试数据(呈现二维图像),并指定 .tif 和数据文件的文件名
- .tif格式的图质量保证
- 以您选择的数据格式存储数据
- 您可以将数据文件重新加载回 Matlab 的质量保证
- 在 Mathematica 中导入数据文件
- Open/process Mathematica 中的数据文件
微分解
Matlab v7.3 的挑战
- 非常规地遵循 HDF5,没有完整的文档;所以你不能直接做下面的尝试1
- 我不明白数据格式到底有多不合常理,所以请也提出一个稳定的方法来使用 v7.3
- 不确定二进制和大数据的可扩展性
- 相关:How to get Matlab data imported with the same dimensions?, How does import data from matlab into mathematica? or how to import matlab code that can be run in mathematica?, MAT-File Level 5 File Format、...
自动方法的挑战
- 我认为不适合,因为我想要本地存储等 here。
Matlab 的 v7 .mat 已弃用 v7.3
- 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.}} *)
输出:步骤 (1-4) 成功但在 Mathematica 11 中导入数据文件(步骤 5)失败,请参见上面的错误消息。
读取 Mathematica 中的数据,其中 Flatten
用于删除一组大括号,因为一组太多
(* *)
SetDirectory["Desktop"]
a = Import["m.mat"] ;
(* https://mathematica.stackexchange.com/a/97252/9815 *)
a=Partition[Flatten[a], 5000]
(* Output fails: {} *)
学习agentp的
他只是简单地使用了一个方阵。
我有三个变量的数据:time
、potential
和 C
,拟合 imagesc()
的参数。
做向量 time m x 1 和 potential n x 1 的方阵。如何应用向量C在方阵A?我对这里的数学理解不够,无法自己回答这个问题。
# time's dimensions m x 1
# (potential')'s dimensions 1 x n
time=0:0.001:1; potential=sin(time); A = time' * potential;
# Output: A is m x n matrix, which is as as expected.
# C is vector 1 x m here.
C = spectrogram(potential); C=reshape(C,1,[]); C=nthroot( abs( C(1,1:1001) ), 1);
如何将方阵 A(C) 转换回这三个变量? - - A(C)是关于方阵的,其中向量C已经应用于方阵A。我不明白创造结果背后的数学原理。
- 如何将这些数据作为一个二进制文件分开? - - 这可能不可能,但我想了解目前的标准。
Matlab:2016a、2016b 预发布
数学:11
OS:Debian 8.5
相关:Is there a way to import the results or data from Matlab to Mathematica automatically?
从 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
请注意 Reverse
和 Transpose
是必需的,因为 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)
我正在尝试使用本地存储将数据从 Matlab 2016a/2016b-prerelease 导入到 Mathematica 11
- 最好有完整的文档
- 可扩展到二进制大数据;现在,1-100 GB,但以后需要 TB
- 从 Mathematica 11 转换为 Matlab 2016 - 如果数据格式可以是双射,那也是一个加号;所以理解读取 Matlab 2016a/b 和 Mathematica 11 中的数据格式
- ...
数据和质量保证
- 完整数据是 x-y 平面,它有 650 000 x 650 000 个点,所以维度大约是一个方阵。
- 以数据的任何子集等 6500 x 6500 为例。
- 保存数据文件和.tiff 图像。
步数
- 指定任何测试数据(呈现二维图像),并指定 .tif 和数据文件的文件名
- .tif格式的图质量保证
- 以您选择的数据格式存储数据
- 您可以将数据文件重新加载回 Matlab 的质量保证
- 在 Mathematica 中导入数据文件
- Open/process Mathematica 中的数据文件
微分解
Matlab v7.3 的挑战
- 非常规地遵循 HDF5,没有完整的文档;所以你不能直接做下面的尝试1
- 我不明白数据格式到底有多不合常理,所以请也提出一个稳定的方法来使用 v7.3
- 不确定二进制和大数据的可扩展性
- 相关:How to get Matlab data imported with the same dimensions?, How does import data from matlab into mathematica? or how to import matlab code that can be run in mathematica?, MAT-File Level 5 File Format、...
- 非常规地遵循 HDF5,没有完整的文档;所以你不能直接做下面的尝试1
自动方法的挑战
- 我认为不适合,因为我想要本地存储等 here。
Matlab 的 v7 .mat 已弃用 v7.3
- 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.}} *)
输出:步骤 (1-4) 成功但在 Mathematica 11 中导入数据文件(步骤 5)失败,请参见上面的错误消息。
读取 Mathematica 中的数据,其中 Flatten
用于删除一组大括号,因为一组太多
(* *)
SetDirectory["Desktop"]
a = Import["m.mat"] ;
(* https://mathematica.stackexchange.com/a/97252/9815 *)
a=Partition[Flatten[a], 5000]
(* Output fails: {} *)
学习agentp的
他只是简单地使用了一个方阵。
我有三个变量的数据:time
、potential
和 C
,拟合 imagesc()
的参数。
做向量 time m x 1 和 potential n x 1 的方阵。如何应用向量C在方阵A?我对这里的数学理解不够,无法自己回答这个问题。
# time's dimensions m x 1 # (potential')'s dimensions 1 x n time=0:0.001:1; potential=sin(time); A = time' * potential; # Output: A is m x n matrix, which is as as expected. # C is vector 1 x m here. C = spectrogram(potential); C=reshape(C,1,[]); C=nthroot( abs( C(1,1:1001) ), 1);
如何将方阵 A(C) 转换回这三个变量? - - A(C)是关于方阵的,其中向量C已经应用于方阵A。我不明白创造结果背后的数学原理。
- 如何将这些数据作为一个二进制文件分开? - - 这可能不可能,但我想了解目前的标准。
Matlab:2016a、2016b 预发布
数学:11
OS:Debian 8.5
相关:Is there a way to import the results or data from Matlab to Mathematica automatically?
从 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
请注意 Reverse
和 Transpose
是必需的,因为 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)