MATLAB Answers

replace comma with dot in large array

조회 수: 110(최근 30일)
JB
JB 18 Aug 2017
Please help, I'm new to matlab coding. I have a array like this
data={'250,1000' '-6,52796' '322,683' '1,50367'
'250,0500' '-6,54959' '322,695' '1,50379'
'250,0000' '-6,63267' '322,711' '1,50395'}
except that it is very large (4500 lines). I want to replace all the commas with dots and convert to a data matrix. So far I have this:
data = strrep(data, ',', '.');%replace ´,´ with ´.´
data=cellfun(@str2num,data);
which can do the trick but it is very slow. Any suggestions to speed up the process?

  댓글 수: 0

로그인 to comment.

채택된 답변

Guillaume
Guillaume 18 Aug 2017
Well, the slow bit is probably your cellfun(@str2num). Replacing that by:
data = str2double(data);
would probably be faster. The strrep step is already as fast as it can be in matlab.
If you want faster, you need to modify your import process but if I recall correctly matlab is not very good as coping with ',' decimal separator.

  댓글 수: 1

JB
JB 18 Aug 2017
the code: dataS1 = str2double(strrep(dataS1, ',', '.'));
did the job in 0.21 sec. Thanks a lot. My old code was 3.6 sec...

로그인 to comment.

More Answers (1)

Image Analyst
Image Analyst 18 Aug 2017
4500 is not very big. I ran this code
% Create sample data
n = 4500
data = cell(1, n);
for k = 1 : n
data{k} = '123,456';
end
% Now do the replacement.
tic;
data = strrep(data, ',', '.'); % Replace ´,´ with ´.´
toc;
% celldisp(data);
fprintf('Done!\n');
and got this:
Elapsed time is 0.002293 seconds.
Two milliseconds seems fast to me. Exactly how fast do you need it?

  댓글 수: 2

JB
JB 18 Aug 2017
Hi Image analyst. It sure is faster than my code, but it does not convert to a data matrix. I might have made a mistake...
Image Analyst
Image Analyst 18 Aug 2017
"data matrix" is so ambiguous that we don't know what it is. ANY kind of matrix in MATLAB could be considered a data matrix, from a character matrix to a cell array to a table to a regular double matrix. Your "data" is a cell array and so is, in fact, already a data matrix. If you want a vector of doubles, you can do
d = str2double(data);
as Guillaume first showed. Did you ever figure out why yours took so long while my running of your code took only 2 ms?

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.

태그

제품


Translated by