问题标签 [mat-file]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 如何在不加载 MATLAB 的情况下检查 MAT 文件的内容?
我在 MAT 文件中有一个很大的结构。我想在不加载 MAT 文件的情况下检查结构中是否存在特定字段,因为内容非常大,我想尽量减少内存使用。
这是可能的,还是我必须像下面的例子一样先加载它?:
matlab - 从 .mat 文件中删除变量
这里有人知道如何从 matlab 文件中删除变量吗?我知道您可以使用该save -append
方法将变量添加到现有的 matlab 文件中,但是没有关于如何从文件中删除变量的文档。
在有人说“直接保存”之前,这是因为我将中间处理步骤保存到磁盘以缓解内存问题,最终每个分析例程将有近 10 GB 的中间数据。谢谢!
matlab - 如何在 MATLAB 或 Unix shell 中查看 .mat 文件?
我只想查看文件的内容。它位于我可以访问的目录中。有 Unix 命令来查看它的内容吗?我也可以在 MATLAB 中加载它。有没有类似的 MATLAB 命令?
谢谢
python - 如何使用 Scipy.io.loadmat 将 Matlab mat 文件中的字符串单元格数组加载到 Python 列表或元组中
我是 Python 新手的 Matlab 用户。我想将 Matlab 中的字符串单元格数组写入 Mat 文件,并使用 Python(可能是 scipy.io.loadmat)将此 Mat 文件加载到类似的类型中(例如字符串列表或字符串元组)。但是 loadmat 将内容读入数组,我不确定如何将其转换为列表。我尝试了无法按预期工作的“tolist”函数(我对 Python 数组或 numpy 数组了解甚少)。例如:
Matlab代码:
Python代码:
那么,变量 array_of_strings 是:
我不确定如何将此 array_of_strings 转换为 Python 列表或元组,使其看起来像
我不熟悉 Python 或 numpy 中的数组对象。您的帮助将不胜感激。
file - MATLAB:使用“-append”标志时,将多个变量保存到“-v7.3”(HDF5).mat 文件似乎更快。怎么会?
注意: 此问题涉及 2011 年观察到的旧 MATLAB 版本 (R2009a) 的问题。根据以下 2016 年 7 月的更新,MATLAB 中的问题/错误似乎不再存在(使用 R2016a 测试;向下滚动到问题末尾以查看更新)。
我正在使用 MATLAB R2009b,我需要编写一个更大的脚本,将一组更大的 .zip 文件的内容转换为 v7.3 mat 文件(具有底层 HDF5 数据模型)。读书没问题。问题在于储蓄。而且实际上没有问题。我的文件使用save命令保存得很好。
我的问题更有意义:为什么我在 MATLAB 中观察到以下令人惊讶的(对我而言)行为?
让我们看一下我的一般问题。在当前的测试场景中,我将生成一个输出:A -v7.3 mat-file。这个 .mat 文件将包含 40个块作为单独的变量。每个变量将被命名为从 1 到 40 的“block_NNN”,并将包含一个带有字段frames和blockNo的结构。字段帧包含 480x240x65 的 uint8 图像数据序列(这里只是使用randi生成的随机数据)。字段blockNo包含块号。
备注:在真正的脚本中(我还没有完成)我将总共执行 370 次以上操作,转换总共 108GB 的原始数据。这就是为什么我关心以下内容。
无论如何,首先我定义一些通用变量:
然后我生成一些形状和大小与实际原始数据相同的虚拟代码:
我现在将所有随机测试数据都放在 struct stu_data2disk中。现在我想使用两种可能的方法之一来保存数据。
让我们先尝试一个简单的:
该文件写入没有问题(286MB)。输出是:
好的 - 然后我记得我想在 40 个块上遵循保存程序。因此,我不是上面的,而是遍历块并按顺序附加它们:
该文件再次保存得很好(286MB)。输出是:
有趣的是,附加方法要快得多?我的问题是为什么?
输出dir converted*.mat
:
这些文件的大小不相同。在 Windows 7 中使用fc进行的测试显示......很多二进制差异。也许数据被转移了一点——因此这并没有告诉我们什么。
有人知道这里发生了什么吗?附加文件是否使用了更优化的数据结构?或者,也许 Windows 已经缓存了文件并使其访问速度更快?
我也努力从这两个文件中进行测试读取。如果不在这里显示数字,附加版本会更快一些(但从长远来看可能意味着什么)。
[编辑]:我只是尝试使用无格式标志(在我的系统上默认为 -v7)并且没有太大区别了:
[编辑]:我纠正了上述错误。之前我提到统计数据是针对 -v6 的,但我错了。我刚刚删除了格式标志并假设默认值为 -v6 但实际上它是 -v7。
我使用 Andrew 的精细框架为我的系统上的所有格式创建了新的测试统计信息(所有格式都用于相同的随机测试数据,现在从文件中读取):
以及文件的大小:
因此 -v6 似乎是最快的编写方式。文件大小也没有太大差异。据我所知,HDF5 确实内置了一些基本的膨胀方法。
嗯,可能是对底层 HDF5 写入函数的一些优化?
目前我仍然认为一些底层的基本 HDF5 写入函数已针对将数据集添加到 HDF5 文件进行了优化(这是在将新变量添加到 -7.3 文件时发生的情况)。我相信我已经在某处读到 HDF5 应该以这种方式优化......虽然不能确定。
其他需要注意的细节:
正如我们在下面安德鲁的回答中看到的那样,这种行为非常系统化。至于您是在函数的本地范围内还是在 m 脚本的“全局”范围内运行这些东西,这似乎也很重要。我的第一个结果来自将文件写入当前目录的 m 脚本。我仍然只能在 m 脚本中重现 -7.3 的 1 秒写入。函数调用显然增加了一些开销。
2016 年 7 月更新:
我再次找到了这个,并认为我可以使用目前可用的最新 MATLAB 对其进行测试。在 Windows 7 x64 上使用 MATLAB R2016a,问题似乎已得到解决:
这在下面接受的答案中使用 Andrew Janke 的reproMatfileAppendSpeedup
函数进行了测试(5 次通过,格式为 7.3)。现在,-append
对于单次保存来说同样慢,或者更慢 - 应该是这样。可能是 R2009a 中使用的 HDF5 驱动程序的早期版本存在问题。
matlab - MATLAB:.mat 版本之间的差异
官方文档声明如下:
. 但我注意到,除了上表中所述之外,还有其他重要的区别。
例如,在 MATLAB 中保存一个包含大约 6,000 个元素且占用176 MB内存的元胞数组会根据我使用-v7还是-v7.3给出以下结果:
- 使用-v7:文件大小 = 15 MB,保存和加载速度很快。
- 使用-v7.3:文件大小 = 400 MB,并且保存和加载非常 慢(可能部分是因为文件很大)。
有没有其他人注意到这些差异?
更新 1:正如回复所指出的,-v7.3依赖于 HDF5,并且根据 Mathworks,“这种格式有很大的存储开销”,尽管目前尚不清楚这种开销是否真的是由于格式本身,还是由于 MATLAB HDF5 的实施和处理。
更新 2:@Andrew Janke 向我们指出了这个非常有用的 PDF(显然在网络上没有 HTML 格式)。有关更多详细信息,请参阅@Amro 提供的答案中的评论。
这一切都把我带到了下一个问题:是否有任何替代方案结合了两全其美(例如 -v7 的效率和-v7.3处理非常大文件的能力)?
matlab - 如何使用神经网络保存 Sift 特征向量以进行分类
SIFT 特征的 Matlab 实现可从http://www.cs.ubc.ca/~lowe/keypoints/找到。在stackoverflow的帮助下。我想将功能保存到 .mat 文件中。特征是圆度、颜色、二值图像中的白色像素数和筛选特征。对于筛选特征,我在上面的代码中使用了描述符 { [siftImage, descriptors, locs] = sift(filteredImg) } 所以我的特征向量现在是 FeaturesTest = [roundness, nWhite, color, descriptors, outputs]; 使用 save('features.mat','Features'); 将此保存到 .mat 文件时 它给出了一个错误。
错误是这样的。
???错误使用 ==> horzcat CAT 参数尺寸不一致。==> user_interface>extract_features 中的错误 336 FeaturesTest = [圆度,nWhite,颜色,描述符,输出];
据我所知,我认为问题在于描述符特征向量的大小。它是 <14x128 双>。此功能有 14 行,而其他只有 1 行在 .mat 文件中。如何将此特征向量与其他特征一起保存到 .mat 文件中?
等待答复。提前致谢。
matlab - 如何从内存中加载 matlab MAT 文件?
假设我有一个 mat 文件的字节数组加载到我的 Matlab shell 中。解析这些数据的一种方法是将其写入磁盘,然后使用 Matlab 加载函数。有没有办法做到这一点而不写入硬盘驱动器(在 Windows 上)?
我知道在 unix 中我可能能够将数据写入命名管道并从中加载,但我认为这在 Windows 中不起作用。
我能想到的唯一解决方案是使用 Ram Disk。很高兴听到其他想法。
python - 从使用 Scipy.io.loadmat 加载的 .mat 文件访问数组内容 - python
更新:这是一个很长的问题,可以归结为,有人可以向我解释 numpy 数组类吗?我在下面回答了我自己的问题。
我正在做一个项目,将数据从 matlab 导入 mysql 数据库,其内容将通过 django 网站提供。我想使用 Scipy.io.loadmat 将 matlab 中的信息转换为我可以在 python 中使用的表单,以便我可以使用 django api 将数据输入数据库。
我的问题是我无法使用 scipy.io.loadmat 导入的数据。它以几个嵌套数组的形式加载,一些变量名似乎丢失了。
这是我为试用创建的测试结构的 matlab 代码:
我可以很容易地将这个结构想象成一个 python 字典,所以看起来这不应该是一个如此复杂的练习。
这是我用来读取文件的python代码(最终我想读取多个文件):
这是从 loadmat 得到的字典:
数据都在那里,但我不知道如何访问这些类对象。我希望能够循环内容,以便我可以处理多个传感器,然后每个传感器的多个通道等。
任何帮助我简化此数据结构的解释或建议的更改以使其更容易将不胜感激。
更新,根据尼克的建议,这里是 repr(matfile) 和 dir(matfile)
显然我需要学习一些关于对象和类的知识。如何提取数组的位并将它们放入变量中。例如:
python - 使用 scipy.io.loadmat 从 .mat Matlab 文件中将字典键转换为 Python 中具有相同值的变量名
我正在尝试使用 scipy.io.loadmat 从 .mat 文件加载基本字典 temp = {'key':array([1,2])}。将 loadmat() 返回的 Python 字典文件中的键转换为与表示键值相同的变量名。
例如:
转换成
我知道如何使用 temp.keys() 获取密钥。然后抓取项目很容易,但我如何强制 temp.keys() 中的字符串列表为变量名而不是字符串。
我希望这是有道理的,但这可能真的很容易,我只是想不出该怎么做。
干杯