Matlab:如何读取以逗号作为小数分隔符的数字?
我有很多(数十万)相当大(>0.5MB)的文件,其中数据是数字,但以逗号作为小数分隔符。 对于我来说使用 sed "s/,/./g"
这样的外部工具是不切实际的。 当分隔符是点时,我只使用 textscan(fid, '%f%f%f')
,但我看不到更改小数点分隔符的选项。 如何有效地读取这样的文件?
文件中的示例行:
5,040000 18,040000 -0,030000
注意:有一个 R 的类似问题,但我使用 Matlab。
I have a whole lot (hundreds of thousands) of rather large (>0.5MB) files, where data are numerical, but with a comma as decimal separator.
It's impractical for me to use an external tool like sed "s/,/./g"
.
When the separator is a dot, I just use textscan(fid, '%f%f%f')
, but I see no option to change the decimal separator.
How can I read such a file in an efficient manner?
Sample line from a file:
5,040000 18,040000 -0,030000
Note: There is a similar question for R, but I use Matlab.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
通过测试脚本,我发现系数小于 1.5。我的代码如下所示:
请注意不同的“ReplaceChar”值和“ReadMode”“块”。
我在我的(不是太新)机器上得到了约 5MB 文件的以下结果:
我的测试脚本的完整代码:
With a test script I've found a factor of less than 1.5. My code would look like:
Note the different 'ReplaceChar' value and 'ReadMode' 'block'.
I get the following results for a ~5MB file on my (not too new) machine:
The full code of my test script:
我的解决方案(假设逗号仅用作小数占位符,并且空格界定列):
如果您碰巧需要删除单个标题行,就像我所做的那样,那么这应该有效:
My solution (assumes commas are only used as decimal place holders and that white space delineates columns):
If you should happen to need to remove a single header line, as I did, then this should work:
您可以使用
txt2mat
。它将自动处理数据。但你可以明确地说:
PS 它可能效率不高,但如果你只需要特定的数据格式,你可以从源文件中复制该部分。
You may use
txt2mat
.It will handle the data automatically. But you can explicitly say:
P.S. It may not be efficient, but you can copy the part from the source file if you need it only for your specific data formats.
您可以尝试通过添加标题行数以及(如果可能)列数作为输入来绕过其文件分析来加速 txt2mat。与使用点分隔小数的 textscan 导入相比,因子不应为 25。 (您也可以使用 mathworks 网站上的作者页面与我联系。)
如果您找到在 matlab 中处理逗号分隔小数的更有效方法,请告诉我们。
You may try to speed up txt2mat by also adding the number of header lines, and, if possible, the number of columns as inputs to bypass its file analysis. There shouldn't be a factor of 25 compared to a textscan import with dot-separated decimals then. (You may also contact me using the author page on the mathworks site.)
Please let us know if you find a more efficient way to handle comma-separated decimals in matlab.