【发布时间】:2017-01-12 21:20:06
【问题描述】:
我正在尝试使用本地存储将数据从 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 中导入数据文件
- 在 Mathematica 中打开/处理数据文件
差异化解决方案
-
Matlab v7.3 面临的挑战
- 在没有完整文档的情况下非常规地遵循 HDF5;所以你不能直接在下面 Attempt 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;所以你不能直接在下面 Attempt 1
-
自动方法的挑战
- 我认为不适合,因为我想要本地存储等here。
Matlab 的 v7 .mat 已弃用 v7.3
- Matlab 的 v5 和 v4 .mat - 我认为已弃用 v7.3
我对 Diff Condition 工作流程的尝试(一)
一些规范:将数据文件指定为 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'); -
#1-2 都成功导入许多变量的 Mathematica
(* 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 用于删除一组大括号,因为一组太多
(* 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的answer
他只是使用一个方阵。
我有三个变量中的数据:time、potential 和C,适合imagesc() 的参数。
-
做向量 time mx 1 和 potential nx 1 的方阵。如何在方阵中应用向量 C 一个?我对这里的数学了解不够,无法自己回答这个问题。
# 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
操作系统:Debian 8.5
相关:Is there a way to import the results or data from Matlab to Mathematica automatically?
【问题讨论】:
-
方法 2 显然需要知道尺寸以便您可以分区(或
ArrayReshape适当地,(当然解决问题的一种方法是将尺寸写入文件) -
不确定从matlab获取数据到mathematica的一般方法,但是当您传输图像时,您是否考虑将它们存储为图像?
-
“MAT-File 7.3,基于 HDF5,但具有未记录的特殊约定。”似乎您不应该指望它的可移植性。我个人会使用原始二进制字节流
-
@agentp 你能使用遵循文档约定的二进制 HDF5 吗?不知道有没有这样的东西。
-
“导入”到 Mathematica(或 MATLAB)通常是指将数据加载到内存中。由于您要处理数 TB 的数据,因此您是否拥有所需的 TB 级 RAM?
标签: matlab binary wolfram-mathematica type-conversion