Merge two columns into one

167 vues (au cours des 30 derniers jours)
Natasha Sekhon
Natasha Sekhon le 8 Sep 2017
Commenté : Stephen23 le 11 Sep 2017
Hello everyone, A quick question: I want to merge two columns into one. What I've tried -
x = [1;2;3]; % (3x1 size)
y = [5;6;7]; % (3x1 size)
XY = [x y]; % (3x2 size)
[ 1 5
2 6
3 8]
versus what i ultimately want
xy = [15;26;38]; % (3x1 size)
Any thoughts? I was looking into reshape as well but that would also give me a 3x2 variable. Thanks,
  3 commentaires
OCDER
OCDER le 8 Sep 2017
Modifié(e) : OCDER le 8 Sep 2017
Is there a mathematical workaround? For instance:
xy = 10*x+y
xy =
15
26
37
If not, yup, it gets pretty messy as Adam said.
[ numbers -> strings -> combined string -> number ] is the workaround.
str2double(sprintf('%d%d', x, y))
sprintf is generally faster if combining multiple numbers to a single string.
str2double is faster than str2num for some reason.
Adam
Adam le 11 Sep 2017
str2double doesn't use eval, which is good, but it wouldn't work in my solution. I can't remember off-hand what it resulted in, but it wasn't the required answer!

Connectez-vous pour commenter.

Réponses (1)

Stephen23
Stephen23 le 11 Sep 2017
Modifié(e) : Stephen23 le 11 Sep 2017
Ugly eval is not required, a simple use of sprint and sscanf is more efficient:
>> x = [1;2;3];
>> y = [5;6;8];
>> sscanf(sprintf('%d%d,',[x.';y.']),'%d,')
ans =
15
26
38
This is more than four times faster than the accepted answer (1e4 iterations):
Elapsed time is 3.26133 seconds. % accepted answer
Elapsed time is 0.716072 seconds. % my answer
  2 commentaires
Natasha Sekhon
Natasha Sekhon le 11 Sep 2017
Ok, great! Yes, i 'm new to using Matlab and appreciate the talk about using eval.
Stephen23
Stephen23 le 11 Sep 2017
@Natasha Sekhon: you might like to read this thread, it has a few points that are worth keeping in mind when learning MATLAB:

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by