AJM*_*JMA 4 matlab matrix vectorization mean bsxfun
在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,:))];
Run Code Online (Sandbox Code Playgroud)
虽然语法不是太长,但我想知道我是否可以通过更紧凑,更有效的方式获得相同的结果(即使用bsxfun或arrayfun?)
正如评论中所提到的,reshape基本上将第一个dim分成两个,前者的长度6为一个3D数组,然后mean沿着后者使用这两个,这将是3D数组中的第二个暗淡和2D输出的最终重塑/挤压-
B = squeeze(mean(reshape(A,6,[],size(A,2)),2))
Run Code Online (Sandbox Code Playgroud)
对于好奇,这也可以通过矩阵乘法来完成(效率接近Divakar的答案,在某些情况下甚至更快一些):
N = size(A, 1)/6;
B = (repmat(eye(6), 1, N)*A)./N;
Run Code Online (Sandbox Code Playgroud)