How to print result in MATLAB?

71 Ansichten (letzte 30 Tage)
Phan
Phan am 21 Aug. 2014
Kommentiert: Phan am 21 Aug. 2014
Dear everyone,
Please help me to solve this problem. I have two arrays like this:
Name=['ABC-8' 'S8' 'EG8'];
Thick=[25 16 12];
I want to create an array like this:
Z=['ABC-825' 'S816' 'EG812'];
Can anyone help me to write a code to make that array?
Thank you so much!

Akzeptierte Antwort

Aniruddha Phatak
Aniruddha Phatak am 21 Aug. 2014
Robert is right, you must define it as a cell array.
name={'ABC-8' 'S8' 'EG8'};
thick=[25 16 12];
for i=1:3
thin{i} = [ num2str( thick(i) ) ];
z{i} = strcat(name{i},thin{i});
end
disp(z);

Weitere Antworten (3)

David Sanchez
David Sanchez am 21 Aug. 2014
define your Name array as a cell, then:
Name={'ABC-8' 'S8' 'EG8'};
Thick=[25 16 12];
Z =cell(numel(Name),1);
for k=1:numel(Name)
Z{k} = strcat(Name{k},num2str(Thick(k)));
end
>> Z
Z =
'ABC-825'
'S816'
'EG812'
  1 Kommentar
Phan
Phan am 21 Aug. 2014
Thank you so much!

Melden Sie sich an, um zu kommentieren.


Guillaume
Guillaume am 21 Aug. 2014
Bearbeitet: Guillaume am 21 Aug. 2014
Assuming that Name is a cell array, that is
Name = {'ABC-8' 'S8' 'EG8'};
(otherwise as you wrote it, it's just a single string). Then:
Z = cellfun(@(s,n) sprintf('%s%d', s, n), Name, num2cell(Thick), 'UniformOutput', false);
will do it. Note that Z has to be a cell array.
  1 Kommentar
Phan
Phan am 21 Aug. 2014
Thank you so much!

Melden Sie sich an, um zu kommentieren.


Robert Cumming
Robert Cumming am 21 Aug. 2014
The two answers on here are correct - however if you take the for loop from one and the sprintf from the other you get a faster result:
Z =cell(1,numel(Name));
for k=1:numel(Name)
Z{k} = sprintf ( '%s%d', Name{k}, Thick(k) );
end
Speed evidence:
clear
clc
Name={'ABC-8' 'S8' 'EG8'};
Thick=[25 16 12];
tic
ZA =cell(1,numel(Name));
for k=1:numel(Name)
ZA{k} = strcat(Name{k},num2str(Thick(k)));
end
toc
tic
ZB = cellfun(@(s,n) sprintf('%s%d', s, n), Name, num2cell(Thick), 'UniformOutput', false);
toc
tic
ZC =cell(1,numel(Name));
for k=1:numel(Name)
ZC{k} = sprintf ( '%s%d', Name{k}, Thick(k) );
end
toc
isequal ( ZA, ZB )
isequal ( ZA, ZC )
Elapsed time is 0.011248 seconds.
Elapsed time is 0.011344 seconds.
Elapsed time is 0.006111 seconds.
  3 Kommentare
Phan
Phan am 21 Aug. 2014
Thank you all! You helped so much!

Melden Sie sich an, um zu kommentieren.

Kategorien

Find more on Data Type Conversion in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by