在 MATLAB 中,给定一个 36 x 17 矩阵 A
,我想对每列的每 6 个元素进行平均,从而创建一个 6 x 17 矩阵 B
。我可以使用以下代码实现它:
A = rand(36, 17);
B = [mean(A(1:6:36,:)); mean(A(2:6:36,:)); mean(A(3:6:36,:)); mean(A(4:6:36,:)); mean(A(5:6:36,:)); mean(A(6:6:36,:))];
虽然语法不是很长,但我想知道是否可以通过更紧凑、更高效的方式(即使用 bsxfun
或 arrayfun
?)实现相同的结果
最佳答案
如评论中所述,reshape
基本上将第一个暗淡分成两部分,前者的长度为 6
以获得 3D
数组,然后使用 mean
沿着这两者中的后者,这将是 3D
数组中的第二个暗淡和 2D
输出的最终 reshape /挤压 -
B = squeeze(mean(reshape(A,6,[],size(A,2)),2))
关于matlab - 如何以矢量化方式平均每第 n 个元素的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43619818/