Preallocating str for speed
Ältere Kommentare anzeigen
I have this code. I want it to run faster. And I keep getting the warning to preallocate str for speed.
clc
str=[];
for T='956754674275'
if T=='0'
str = [str sprintf('A')];
elseif T=='1'
str = [str sprintf('B')];
elseif T=='2'
str = [str sprintf('C')];
elseif T=='3'
str = [str sprintf('D')];
elseif T=='4'
str = [str sprintf('E')];
elseif T=='5'
str = [str sprintf('F')];
elseif T=='6'
str = [str sprintf('G')];
elseif T=='7'
str = [str sprintf('H')];
elseif T=='8'
str = [str sprintf('I')];
elseif T=='9'
str = [str sprintf('J')];
end
end
a=str
Please how do I preallocate str for speed. Please help.
5 Kommentare
Wan Ji
am 11 Aug. 2021
just do
a = '956754674275';
str = a;
Then
ct = 0;
for T='956754674275'
ct = ct+1;
if T=='0'
str(ct) = 'A'; % following you just do in this form
elseif T=='1'
str = [str sprintf('B')];
elseif T=='2'
str = [str sprintf('C')];
elseif T=='3'
str = [str sprintf('D')];
elseif T=='4'
str = [str sprintf('E')];
elseif T=='5'
str = [str sprintf('F')];
elseif T=='6'
str = [str sprintf('G')];
elseif T=='7'
str = [str sprintf('H')];
elseif T=='8'
str = [str sprintf('I')];
elseif T=='9'
str = [str sprintf('J')];
end
end
Ernest Adamtey
am 11 Aug. 2021
Ernest Adamtey
am 11 Aug. 2021
Wan Ji
am 12 Aug. 2021
Antworten (3)
Henry Barth
am 11 Aug. 2021
correspondingChars = 'ABCDEFGHIJ';
str = correspondingChars(arrayfun(@str2double,T,'UniformOutput',true));
dpb
am 11 Aug. 2021
No loop needed here -- using relationship to ASCII coding and that MATLAB char() strings are just arrays, write
T='956754674275';
% the engine
C='A'-'0'; % difference offset from '0' to 'A' in code--MATLAB returns 17
str=char(T+C); % convert to char() from double of input + offset
As long as the substitution pattern is ordered sequentially, the above works no matter what the initial coding point is simply by changing the target reference in computing the offset constant, C. If it could be a variable, then create a lookup table and index into it instead.
Above produces--
>> T='956754674275';
>> C='A'-'0'
C =
17
>> char(T+C)
ans =
'JFGHFEGHECHF'
>> all(ans==str)
ans =
logical
1
>>
Kategorien
Mehr zu Programming finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!