3-D matrix operations
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a 5X126 matrix that I am splitting into a [5,21,6] matrix using reshape. I want to average the values of neighboring columns in each of these submatrices and store them into a final 3-d matrix that will be [5 20 6]. How can i write a for loop to do this?
I am very new to Matlab so any help would be appreciated. Thanks!
3 commentaires
Turlough Hughes
le 4 Mar 2020
"I want to average the values of neighboring columns" is a little ambiguous, if we consider a smaller example, such as the following 5 by 5 matrix
>> M = randi(10,[5 5])
M =
8 9 2 4 6
1 8 1 5 9
9 6 10 7 4
10 2 4 1 5
10 4 3 9 1
Is this the output you're expecting on each page as follows:
>> result = M(:,1:end-1) + diff(M,1,2)./2
result =
8.5000 5.5000 3.0000 5.0000
4.5000 4.5000 3.0000 7.0000
7.5000 8.0000 8.5000 5.5000
6.0000 3.0000 2.5000 3.0000
7.0000 3.5000 6.0000 5.0000
Réponse acceptée
the cyclist
le 4 Mar 2020
Assuming that for the average of columns you want the result that Turlough specified, then
RefBloAvg = movmean(RefBlock,[0 1],2);
RefBloAvg(:,end,:) = [];
Note that this does not need to be in a loop of any kind. It works on the entire array at once.
Plus de réponses (2)
Turlough Hughes
le 4 Mar 2020
Here's the method I was suggesting. The idea is to take the first value and add half the difference (effectively interpolating)
RefBloAvg = RefBlock(:,1:end-1,:) + diff(RefBlock,1,2)./2;
0 commentaires
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!