Merge two columns into one

163 次查看(过去 30 天)
Natasha Sekhon
Natasha Sekhon 2017-9-8
评论: Stephen23 2017-9-11
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 个评论
OCDER
OCDER 2017-9-8
编辑:OCDER 2017-9-8
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 2017-9-11
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!

请先登录,再进行评论。

回答(1 个)

Stephen23
Stephen23 2017-9-11
编辑:Stephen23 2017-9-11
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 个评论
Natasha Sekhon
Natasha Sekhon 2017-9-11
Ok, great! Yes, i 'm new to using Matlab and appreciate the talk about using eval.
Stephen23
Stephen23 2017-9-11
@Natasha Sekhon: you might like to read this thread, it has a few points that are worth keeping in mind when learning MATLAB:

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Whos 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by