程序架构来处理大型. csv文件
19日视图(30天)
显示旧的评论
下午好
所以我有点担心。我刚刚花了一个星期写一个matlab程序,需要在大量数据从一个. csv文件
当我开始这个项目我选择了一个表变量类型,因为它的易用性与readtable等功能()
但是我没有坚持一个无法使用程序。过程我需要小时matlab . csv文件
我认为以下选项
matlab似乎尚未开发的任何性能表的数据类型与没有希望。
1:重写整个程序使用数组
问题,在我的文件都是十六进制值的数据。我需要将它们转换为十进制数字使用hex2dec函数仅适用于一个char数据类型。所以使用一组双打是不可能的。不知道去哪里
2:尽量使用paraelle工具箱重写这个程序
想法吗?
回答(5)
彼得·珀金斯
2021年7月28日
编辑:彼得·珀金斯
2021年7月28日
没有代码,很难给出具体的建议。
十六进制的问题,第一个建议我将会转换成矢量图写代码。你50 k调用加下标表明你在做标量在紧密循环操作。这不是最好的办法在MATLAB编写代码。再一次,没有多少信息,所以很难说。很多电话撑加下标表明你在做分配给一个变量使用括号,沃尔特指出,是低于使用点(因为它必须做更多)。这是一个不幸的差异并不突出的医生,但也许应该。在任何情况下,没有代码,所以…
沃尔特是正确的,因为18 b,性能,尤其是对分配到大表中,改善了不少。
如果你不能vectorize,你不能升级到新版本,这可能是没有必要“重写整个程序使用数组”。通常可以只关注紧环和“葫芦”的一些变量的表的一部分代码,然后放到。用表的组织和他们提供方便,在小剂量使用原始数值性能。表有很多,和永远不会和双数组一样快。这并不意味着你应该避免。
它真的可以帮助提供具体的代码示例。
3评论
沃尔特·罗伯森
2021年7月28日
很难讨论高水平项目架构没有理解的需要执行的操作。
例如有
一些
需求的最有效的方法是使用一个多维超立方体的人物,与任何一个“单词”存储为文本
列
(而不是典型的行)。但是还有其他的需要,你可能想要存储为“文字”
行
在一个超立方体。
沃尔特·罗伯森
2021年7月27日
在
一些
情况下,根据文件的格式,你有选择如何进行:
- readtable()和readmatrix()和readcell()允许一个“格式”选项,使用相同的格式规范和使用textscan()——包括可能使用x %的格式(可能与长度规范,如果你的字段是固定的宽度)。
- 您可以使用textscan()直接,因为你正在与文本文件
- 您可以使用底层I / O命令,包括fscanf()或fgetl sscanf()(),根据你的文件是多么复杂。如果你的有效格式是足够复杂,你需要阅读一次一行,那么这可能会降低性能
- 当你的文件不是很复杂,但是有不同的部分,还有高得惊人的性能改善是通过读取整个文件的文本和使用正则表达式()把它分成部分,然后textscan()或sscanf()部分。相对于循环性能测试每一行,。
杰里米·休斯
2021年7月28日
编辑:杰里米·休斯
2021年7月29日
首先,它将有助于看到一个示例文件,和一些示例代码演示了这个问题。
这是最好的我能说我看到的东西。
如果整个变量在十六进制格式,您可以使用导入选项转换迅速导入。
detectImportOptions
将会看到
0 x1a
作为一个十六进制值,但不是没有前缀,但它可以被解读为十六进制,如果你问。
选择= detectImportOptions(文件名,“分隔符”,”、“)
% varNamesOrNumbers = [1 3 5]
%或varNamesOrNumbers = (“Var1”、“Var3”)
选择= setvaropts (varNamesOrNumbers选择,“NumberSystem”,“六角”,“类型”,“汽车”);
%,也可以提高阅读能力仅仅通过选择列
%你想(这是可选的)
选择。SelectedVariableNames =选择。VariableNames ([1 3 5 7 9]);
T = readtable(文件名,选择)
12个评论
dpb
2021年7月31日
如果我能提前把它作为十六进制值我将以更好的状态。你们可以提供建议吗?”
这上面已经完成由沃尔特。
注:
readXXX
的新形式
readmatrix
所有通过的重任
readtable
最后;其他人只是前端给它一些klews的文件的内容,并指定如何将数据返回给调用者。
这些可能会提供一个小的性能提升readtable;他们主要做的是返回一个数组或单元阵列代替一个表。如果所有的操作都是基于一个数组,那么可能没有优势在使用表格。
然而,使用
detectImportOptions
和自定义导入对象包括变量类型十六进制,他们几乎肯定会给好处——主要是导入数据的十进制值而不是“字符”或cellstr或字符串,然后将不得不转换——相反,通过工作系统i / o库。