快速逐列分组

Ras*_*eri 3 arrays matlab

假设MN是两个数组.在最简单的情况下,M和N是这样的:

1 14 7 80

2 15 8 12

3 16 9 11

(3行和4列)

我想1除以所有三列,然后将列2除以所有三列,然后将列3除以所有三列.

最快的方法是什么?(当然,使用for循环不是一个好的算法.)

编辑:

这是我的for循环代码:

idx = 1;
for i = 1 : size(N,2)
   for j = 1 : size(M,2)
       u(:,idx)=N(:,i) ./ M(:,j);
       idx = idx + 1;
   end
end
Run Code Online (Sandbox Code Playgroud)

San*_*lai 5

如何使用bsxfunpermute

假设MN相同并且相等A

out = bsxfun(@rdivide, permute(A,[1 3 2]), A)
Run Code Online (Sandbox Code Playgroud)

输入:

A =

 1    14     7    80
 2    15     8    12
 3    16     9    11
Run Code Online (Sandbox Code Playgroud)

样本输入的结果:

out(:,:,1) =

1.0000    0.0714    0.1429    0.0125
1.0000    0.1333    0.2500    0.1667
1.0000    0.1875    0.3333    0.2727


out(:,:,2) =

14.0000    1.0000    2.0000    0.1750
7.5000    1.0000    1.8750    1.2500
5.3333    1.0000    1.7778    1.4545


out(:,:,3) =

7.0000    0.5000    1.0000    0.0875
4.0000    0.5333    1.0000    0.6667
3.0000    0.5625    1.0000    0.8182


out(:,:,4) =

80.0000    5.7143   11.4286    1.0000
6.0000    0.8000    1.5000    1.0000
3.6667    0.6875    1.2222    1.0000
Run Code Online (Sandbox Code Playgroud)