请帮我创建一个高大数组从大的二进制文件和“fileDatastore”而不会耗尽内存。
10视图(30天)
显示旧的评论
我有一个大的数据文件(具体文件我现在使用~ 60 gb,尽管几百gb是典型的),我想创建一个高的数组。我希望这将使我快速执行计算的数据没有加载到内存中。自定义的数据格式,所以看起来我坚持使用自定义“fileDatastore”格式。
使数据存储并不是一个问题,但是每次我试着和加载它耗尽内存页面文件(已经使我的页面文件尽可能大的Windows上10)。这个问题似乎是Matlab需要暂时加载前的完整的数据存储到内存中高大的数组。将(据说)后释放的内存文件完全阅读,但它从来没有得到。这是由于我无法找到任何方式告诉“fileDatastore”只有一次读取的数据。在其他类型的数据存储有一个“ReadSize”属性,似乎这样做,但这是fileDatastore缺少有效的选项。@readfcn我使用设置(部分正确读取数据(我可以很容易地告诉它从当前位置读取下一个X值),我只是不知道如何使fileDatastore传递第二个参数,这些信息(第一个参数是文件名)。
我想象我可以手动数据分解成单独的数据存储,然后combione每个高到相同的数组,但这1)将是相当乏味的每次我想我们fileDatastore,和2)我想这将推迟执行功能产生负面影响,因为(我猜)matlab将尝试任何优化从每个小sub-datastore分别读取数据而不是优化整个数据文件。因此,我宁愿找一个方法从单一fileDatastore。
。
。
PS如果任何MathWorks人员认为这-请建议开发团队来解决这个问题。授予我使用个人电脑,不是一些集群移植版的内存,但它是荒谬的,电脑的i7 + 16 gb的ram和Matlab的“最新、最好的大数据解决方案”不能设法处理~ 60 gb文件没有撞电脑....我不能想象它会有人(熟悉源代码)超过几个小时来添加一个选项的“通过这个号码你的读函数来决定多少钱应该在给定的时间阅读”(或类似的)。
接受的答案
Edric埃利斯
2017年7月10日
在R2017a,
fileDatastore
目前仅限于一次读取整个文件。这是一个已知的限制目前的实现中,这绝对是我们希望能够解决在未来的MATLAB的释放。就目前而言,不幸的是唯一的解决方案是将数据分割成多个文件,每个文件可以加载而不会耗尽内存。你可以使用一个
fileDatastore
实例与多个数据文件,在第一个例子所示
fileDatastore参考页面
。