Speed up for loop in Matlab

2020-04-01 08:52发布

问题:

I have the following for loop which makes my program runs very slow when the file size is very big. What is the best way to vectorize it.

I read data from a PLY file as here using the command, data = textread(fileName, '%s','delimiter', '\n');.data is a n*1 cell array. Each element in data is a 7*1 cell array of char values. Sample data file is here.

for i = 1:length(data)-1
    pc(i, 1) = (str2double(cellstr(data{i,1}{1,1})));
    pc(i, 2) = (str2double(cellstr(data{i,1}{2,1})));
    pc(i, 3) = (str2double(cellstr(data{i,1}{3,1})));
    pc(i, 4) = (str2double(cellstr(data{i,1}{4,1})));
    pc(i, 5) = (str2double(cellstr(data{i,1}{5,1})));
    pc(i, 6) = (str2double(cellstr(data{i,1}{6,1})));
end

回答1:

This will do what you want

>> pc = str2double([data{:}].')
pc =
    0.1033   -0.2737    0.8570  221.0000  196.0000  174.0000  255.0000
    0.1054   -0.2731    0.8550  220.0000  195.0000  173.0000  255.0000
    ...
    0.1139   -0.2803    0.8490  221.0000  194.0000  172.0000  255.0000
    0.1117   -0.2829    0.8500  225.0000  200.0000  178.0000  255.0000

You can remove the last column and row (as appears to be done in your question) with

>> pc = pc(1:end-1, 1:end-1)
pc =
    0.1033   -0.2737    0.8570  221.0000  196.0000  174.0000
    0.1054   -0.2731    0.8550  220.0000  195.0000  173.0000
    ...
    0.1139   -0.2803    0.8490  221.0000  194.0000  172.0000