Create multiple column vectors by entering a matrix?

7 views (last 30 days)
I find myself copy/pasting 3xN matrices into Matlab frequently. When I do paste in the matrix, I eventually like to specify the columns as new variables so that I can use the plot3 command or similar. My current process is as follows:
data = [1 2 3; 1 2 3; 1 2 3];
x = data(:,1);
y = data(:,2);
z = data(:,3);
plot3(x,y,z);
Alternatively, after I paste in data, I plot using the following syntax:
plot3(data(:,1),data(:,2),data(:,3));
I would much prefer a solution such as:
[x,y,z] = [1 2 3; 1 2 3; 1 2 3];
But I know that this does not work. Does anyone have a trick or tip for me to expedite my process?
Thanks!

Accepted Answer

Kelly Kearney
Kelly Kearney on 28 Sep 2015
data = [1 2 3; 1 2 3; 1 2 3];
data = num2cell(data,1);
[x,y,z] = deal(data{:})
It would be nice if we could somehow combine lines 2 and 3 (i.e. [x,y,z] = deal(num2cell(data,1){:})), but I've never found a neat syntax to do comma separated list expansion in that way.

More Answers (1)

Stephen23
Stephen23 on 29 Sep 2015
Edited: Stephen23 on 29 Sep 2015
Here is an alternative solution. Rather than littering your workspace with unnecessary variables and wasting memory simply create an anonymous function wrapper for plot3:
myplot3 = @(X,varargin) plot3(X(:,1),X(:,2),X(:,3),varargin{:});
This creates no new data variables in your workspace, and gives neater code:
data = [3,2,1;2,0,2;1,2,3];
myplot3(data)
  1 Comment
tmac28
tmac28 on 30 Sep 2015
I wish I only needed this for plotting purposes, but you taught me something about varargin, so I appreciate that!

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!