【问题标题】:Speed up PLY file reading加快 PLY 文件读取
【发布时间】:2015-10-31 12:04:40
【问题描述】:

目前我在 MATLAB 中使用以下代码段将 PLY 读入 MATLAB 矩阵。 Here is a sample PLY file。但是当 PLY 文件的大小非常大时,它需要相当长的时间。

有没有更好的方法在 MATLAB 中有效地读取文本文件?

data = textread(fileName, '%s','delimiter', '\n');
data = data(15:length(data),1);
data = (cellfun(@(x) strread(x,'%s','delimiter',' '), data, 'UniformOutput', false));

(这个问题是我之前列出的问题的一部分here。)

【问题讨论】:

    标签: performance matlab matrix text


    【解决方案1】:

    您可以使用dlmread 函数并利用它指定起始位置的能力

    >> data = dlmread(filename, ' ', 14, 0)
    data =
    
        0.1054   -0.2731    0.8550  220.0000  195.0000  173.0000  255.0000         0
        0.1008   -0.2754    0.8550  228.0000  202.0000  184.0000  255.0000         0
        ...
        0.1139   -0.2803    0.8490  221.0000  194.0000  172.0000  255.0000         0
        0.1117   -0.2829    0.8500  225.0000  200.0000  178.0000  255.0000         0
    

    最后两个参数指定数据的起始行和列。最后的零出现是因为测试文件中的每一行都以空格结尾。我们可以删除这些

    >> data = data(:, 1:end-1);
    

    dlmread 函数读取数字数据,无需在我的previous answer 中将string 转换为double

    【讨论】:

    • 这很棒。它再次将给定示例文件所花费的时间从 0.297907 秒显着缩短到 0.044519 秒。我认为我的下一条评论似乎应该再次成为另一个新问题。如果我想从包含文本“end_header”的特定行读取 PLY 文件怎么办。请评论,然后我可以创建一个新问题。
    • 不清楚您想要什么,您是要阅读文本end_header 以及数字数据还是要找到end_header 然后阅读后面的行?可能最好作为一个新问题。
    • 是的,我想从字符串 'end_header' 之后的行开始阅读。好的,我将提出一个新问题。
    • 刚刚发起了一个新问题 (stackoverflow.com/questions/33451725/…)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多