tags:

views:

71

answers:

3

Hello,

I have a matrix containing 4320 entries

for example:

P=[ 26 29 31 33 35 26 29 ..........25]

I want to create 180 matrices and every matrix contains 24 entries,i.e

the 1st matrix contains the 1st 24 entries

the 2nd matrix contains the 2nd 24 entries and so on

I know a simple method but it will take a long time which is:

P1=P(1:24);P2=P(25:48),..........P180=P(4297:4320)

and it is dificult since I have huge number of entries for

the original matrix P

thanks

A: 

You can loop through the items in the index, counting up, creating a new matrix every 24 entries. Modular arithmetic might help:

foreach (var currentIndexInLargerMatrix : int = 0 to 4320)
begin
  matrixToPutItIn := currentIndexInLargerMatrix div 24;
  indexInNewMatrix := currentIndexInLargerMatrix mod 24;
end

in many languages the modulus (remainder) operator is either "mod" or "%". "div" here denotes integer division. Most languages just use the virgule (slash) "/".

This obviously isn't complete code, but should get you started.

McKay
Sorry,I forgot to mention that I am using MATLAB program
+2  A: 

I'm going to go ahead and assume this is MATLAB-related, in which case you'd use the reshape function:

Px = reshape(P, 24, []);

Px will now be a proper matrix, and you can access each of the 180 "matrices" (actually row vectors, you seem to be confusing the two) by simple MATLAB syntax:

P100 = P(:,100);
You
A: 

I think You's answer is the best way to approach your problem, where each submatrix is stored as a row or column in a larger matrix and is retrieved by simply indexing into that larger matrix.

However, if you really want/need to create 180 separate variables labeled P1 through P180, the way to do this has been discussed in other questions, like this one. In your case, you could use the function EVAL like so:

for iMatrix = 1:180                          %# Loop 180 times
  tempP = P((1:24)+24*(iMatrix-1));          %# Get your submatrix
  eval(['P' int2str(iMatrix) ' = tempP;']);  %# Create a new variable
end
gnovice
Thanks for everyone for this help

related questions