Stokes
Stokes

Reputation: 11

how to get more than one number inside of matrices

Ok. I have a simple question although I'm still fairly new to Matlab (taught myself). So I was wanting a 1x6 matrix to look like this below:

0

0

1

0

321, 12      <--- needs to be in one box in 1x6 matrices

4,30,17,19   <--- needs to be in one box in 1x6 matrices 

Is there a possible way to do this or am I going to just have to write them all in separate boxes thus making it a 1x10 matrix?

My code:

event_marker = 0;
event_count  = 0;
block_number = 1;

date = [321,12] % (its corresponding variables = 321 and 12)

time = [4,30,17,19] % (its corresponding variable = 4 and 30 and 17 and 19)

Upvotes: 0

Views: 62

Answers (3)

yuk
yuk

Reputation: 19880

If your date and time variables are actually represent date (numbers of days, months, years) and time (hours, mins, sec), they can be packed into one or two numbers.

Look into DATENUM function. If you have a vector, for example, [2013, 4, 10], representing April 10th of 2013 you can convert it into a serial date:

daten = datenum([2013, 4, 10]);

It's ok if you have number of days in a year, but not months. datenum([2013, 0, 300]) will also work.

The time can be packed together with date or separately:

timen = datenum([0, 0, 0, 4, 30, 17.19]);

or

datetimen = datenum([2013, 4, 10, 4, 30, 17.19]);

Once you have this serial date you can just keep it in one vector with other numbers.

You can convert this number back into either date vector or date string with DATEVEC and DATESTR function.

Upvotes: 0

Rody Oldenhuis
Rody Oldenhuis

Reputation: 38042

So if I understand you correctly, you want an array that contains 6 elements, of which 1 element equals 1, another element is the array [312,12] and the last element is the array [4,30,17,19].

I'll suggest two things to accomplish this: matrices, and cell-arrays.

Cell arrays

In Matlab, a cell array is a container for arbitrary types of data. You define it using curly-braces (as opposed to block braces for matrices). So, for example,

C = {'test', rand(4), {@cos,@sin}}

is something that contains a string (C{1}), a normal matrix (C{2}), and another cell which contains function handles (C{3}).

For your case, you can do this:

C = {0,0,1,0, [321,12], [4,30,17,19]};

or of course,

C = {0, event_marker, event_count, block_number, date, time};

Matrices

Depending on where you use it, a normal matrix might suffice as well:

M = [0  0  0  0 
     event_marker  0  0  0 
     event_count  0  0  0
     block_number  0  0  0 
     321 12  0  0
     4 30 17 19];

Note that you'll need some padding (meaning, you'll have to add those zeros in the top-right somehow). There's tonnes of ways to do that, but I'll "leave that as an exercise" :)

Again, it all depends on the context which one will be easier.

Upvotes: 3

Shai
Shai

Reputation: 114866

Consider using cell arrays rather than matrices for your task.

data = cell(6,1); % allocate cell
data{1} = event_marker; % note the curly braces here!
...
data{6} = date;   % all elements of date fits into a single cell.

Upvotes: 1

Related Questions