Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I divide/split up a matrix by rows between two other matrices?

I have a matrix and a vector each with 3000 rows:

fe = [-0.1850   -0.4485; ...
      -0.2150    2.6302; ...
      -0.2081    1.5883; ...
      -0.6416   -1.1924; ...
      -0.1188    1.3429; ...
      -0.2326   -2.2737; ...
      -0.0799    1.4821; ...
      ... %# lots more rows
      ];

tar = [1; ...
       1; ...
       2; ...
       1; ...
       2; ...
       1; ...
       1; ...
      ...  %#lots more rows
      ];

I would like to divide up the rows of fe and tar such that 2/3 of them are placed into one set of variables and the remaining 1/3 are placed into a second set of variables. This is for classification purposes (i.e. one set is training data and the other is test data).

There are two potential ways for me to do this:

  • Split up the rows in order, with the first 2/3 in one matrix and the last 1/3 in another.
  • Randomly select and distribute 2/3 of the rows to one matrix and place the remainder in another.

How can I implement each of these solutions?

like image 941
edgarmtze Avatar asked Mar 22 '11 00:03

edgarmtze


1 Answers

Assuming you need to select 2/3 of the rows and both the columns, you can do

feTrain=fe(1:2000,:);
feTest=fe(2001:end,:);

If you wanted to assign 2/3 of the rows picked randomly (i.e., not the first 2/3), you can use the randperm function to generate random ordering of the row indices and use that to index.

nRows=size(fe,1);
randRows=randperm(nRows);%# generate random ordering of row indices
feTrain=fe(randRows(1:2000),:);%# index using random order
feTest=fe(randRows(2001:end),:);
like image 109
abcd Avatar answered Sep 29 '22 23:09

abcd