How to extract elements from each dimension of a 3D matrix and put it in a vector.

2 views (last 30 days)
I have a 3D matrix that is
B = (31, 37, 91);
I would like to extract all the elements from each dimension, and place it in a vector, then take the variance of the vector.
In the end, I would like to make a vector of all of the variances.
For example,
C = [Var1; Var2; ... Var91];
Below is what I have tried so far, but I am curious if there is a way without doing each dimension individually.
Thanks in advance!
F1 = B(:,:,1);
F1v = F1(:); %vector
Var1 = var(F1v);
F2 = B(:,:,2);
F2v = F2(:); %vector
Var2 = var(F2v);

Accepted Answer

Guillaume
Guillaume on 9 Sep 2019
Sure, you just have to type the same code 91 times...
As you can guess, that's not a viable approach. If you start numbering variables, you're doing it wrong.
If you're on R2018b or later, it's trivial to obtain your vector:
V = var(B, 0, [1 2]); %requires R2018b or later
Optionally, you can squeeze the result, but having a vector along the page makes more sense.
In earlier versions, var can only operate on one dimension at once, so you must first reshape your matrix into an Nx91 matrix:
V = var(reshape(B, [], size(B, 3)))
  1 Comment
Anna M
Anna M on 9 Sep 2019
Edited: Anna M on 9 Sep 2019
Thanks! The reason I am numbering my variables is because I use the individual vectors of each dimension in other calculations. However, I am a beginner, so I am working on consicing my code and becoming less redundant..
Your suggestion gave me exactly what I needed. I do have a question, what does the [1 2] mean in: V = var(B, 0, [1 2]);
I did not want to use that if I did not fully understand.
Edit*: I see it now! I read it means for dimensions 1 and 2. Thanks again

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!