Question

In the code below "G" returns a (10*4) matrix which is in the correct orientation.

All I want then is to be able to view/call these (10*4) matrices indexed by (j,k). However when I store the matrix "G" in the 4-D matrix "test" the data is displayed in a way that is a little counter intuitive? When I look at test in the variable editor I get:

val(:,:,1,1) =

1

val(:,:,2,1) =

0

val(:,:,3,1) =

0

val(:,:,4,1) =

0 . . . val(:,:,1,10) =

1

val(:,:,2,10) =

0

val(:,:,3,10) =

0

val(:,:,4,10) =

0

So all the data is there but I want it displayed at a 10*4 matrix?

Also as you will see I had to change the code for "Correl_betas" and transpose "G" to get to where I am above. However I felt I did this by playing around rather than what I thought the code should be doing. Why does the original code not work? I am having to change the order of the 3rd and 4th dimensions when declaring "Correl_betas" and then pass the transpose of G, but this seems totally counter intuitive as the last two dimensions in the original "Correl_betas" and the original (un-transposed) "G" also match? But when I did it this way the ordering seemed even further from the 10*$ matrix I want.

So I have 2 questions?

1.) How can I get to the 2-dimentional (10*4) matrices I want indexed by j,k from where I am?

2.) How come the original code above doesn't result in the last two columns producing (10,4) matrices?

A large part of the problem is that I have very little experience working with matrices that have more than 2 dimensions so sorry if this question shows a lack of understanding. Maybe a pointer to a god tutorial on how to interpret manipulate higher dimensional matrices would help too.

%Correl_betas=zeros(50,50,10,4);
Correl_betas=zeros(50,50,4,10);
mats=[1:10]';
L1=-1;

for j=1:51

  L1=L1+1;
  L2=-1;

    for k=1:51

      L2=L2+1;
      lambda=[ L1; L2 ];   
      nObs=size(mats,1);

      G= [ones(nObs,1) (1-exp(-mats./lambda(1)))./(mats./lambda(1)) ((1-exp(-mats./lambda(1)))./(mats./lambda(1))-exp(-mats./lambda(1))) ((1-exp(-mats./lambda(2)))./(mats./lambda(2))-exp(-mats./lambda(2)))];




     %Correl_betas(j,k,:,:)=G;
     Correl_betas(j,k,:,:)=G';

     test=Correl_betas(j,k,:,:);

     temp1=corrcoef(Correl_betas(j,k,:,2),Correl_betas(j,k,:,3),'rows','complete');
     temp2=corrcoef(Correl_betas(j,k,:,2),Correl_betas(j,k,:,4),'rows','complete');
     temp3=corrcoef(Correl_betas(j,k,:,3),Correl_betas(j,k,:,4),'rows','complete');

     F2_F3(j,k)=temp1(1,2);
     F2_F4(j,k)=temp2(1,2);
     F3_F4(j,k)=temp3(1,2);


end

end
Was it helpful?

Solution

To reshape the matrix as desired,

val2 = permute(val,[4 3 2 1]);

This brings the 4th dimension (size of 10) onto the first, and the the 3rd dimension (size of 4) onto the second.

In your loop, both j and k cycle through 1:51 so the first two dimensions of Correl_betas will end up being length 51 too.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top