【发布时间】:2016-06-23 03:37:52
【问题描述】:
有大量关于将数据读入 MATLAB 的各种方法的帖子,但似乎都没有解决这个特殊问题。如何在没有循环的情况下只读取每隔一行?
我的数据格式如下:
1 2 3 4 5 6 7 8 9 string
1 2 -1 5 3 -1 ...
1 2 3 4 5 6 7 8 9 string
1 2 -1 5 3 -1 4 9 -1 ...
...
换句话说,数据交替行。我似乎无法弄清楚只抓取奇数行的数字部分。
我知道我可以使用fscanf 作为fscanf(fid, '%f %f %f %f %f %f %f %f %f %*s') 来实际阅读相关行。但是,这在不遵循相同格式的偶数行上会分崩离析。
我还尝试了fscanf(fid, '%f %f %f %f %f %f %f %f %f %*s\n%*[\n]'),认为这可能匹配 2 行(由于包含返回字符),同时由于星号和正则表达式组合而跳过偶数行上的数据。然而,这并没有奏效。重要的是要注意偶数行的长度不同,所以我不能只对它们进行特定的模式匹配。
我该怎么做?
【问题讨论】:
-
您有什么特别的原因不想使用循环吗?这样做真的很容易:stackoverflow.com/questions/5531082/…
-
涉及预处理文件的第二种解决方案在这里:stackoverflow.com/questions/9894986/…
-
@gariepy:我不想使用循环,因为通常我要处理大量文件。另外,如果可以避免的话,我不想再解析每一行。
-
另外,我在 Windows 上,我不想编辑文件。只需读取数据
-
所以,建议......如果您真的只是想要大文件的速度,请不要强加诸如“无循环”之类的任意约束。循环并不邪恶。有时最好的答案是循环。 MATLAB 并没有真正用于这类事情的内置实用程序。