如何以矢量化方式平均矩阵中的每个第 n 个元素?
Posted
技术标签:
【中文标题】如何以矢量化方式平均矩阵中的每个第 n 个元素?【英文标题】:How can I average every nth element in a Matrix in a vectorized way? 【发布时间】:2020-03-25 12:38:27 【问题描述】:在 Matlab 中,我有一个 64x64x256x256 矩阵 A。我想对最后 2 个维度的每个第 4 个元素进行平均,以获得一个 64^4 的矩阵。以前我使用 2 个 for 循环来完成此操作,但是速度很慢,我想加快速度。
for n2 = 1:pts
tmp_Matrix(:,:,:,n2) = sum(Matrix_A(:,:,:,(1+numAvg*(n2-1):n2*numAvg)),4)/numAvg;
end
for n1 = 1:pts
Final_Matrix(:,:,n1,:) = sum(tmp_Matrix(:,:,(1+numAvg*(n1-1):n1*numAvg),:),3)/numAvg;
end
还有一些其他类似的问题,但他们处理的是二维矩阵,并没有扩展到更高的维度。任何建议将不胜感激!
【问题讨论】:
您的代码平均了 N 个元素的组,而不是每个第 N 个元素。您是否预先分配了输出数组?预分配是加快循环速度的关键。 【参考方案1】:您可以使用movmean
:
tmp_Matrix = movmean ( ...
Matrix_A, ...
[0 numAvg-1], ...
4, ...
'Endpoints', 'discard', ...
'SamplePoints', 1:numAvg:size(Matrix_A, 4) ...
);
Final_Matrix = movmean ( ...
tmp_Matrix, ...
[0 numAvg-1], ...
3, ...
'Endpoints', 'discard', ...
'SamplePoints', 1:numAvg:size(Matrix_A, 3) ...
);
【讨论】:
以上是关于如何以矢量化方式平均矩阵中的每个第 n 个元素?的主要内容,如果未能解决你的问题,请参考以下文章