meshgrid扩展到多维问题?

给定3个元素1、2、3,生成一个3*3的矩阵,要求第一列只含1个元素1,第二列只含1个元素2,第三列只含1个元素3,其余元素为0,有点类似于排列组合,共有27种结果。

(代码由技术专家团-Joel提供)

clc;
clear;
q = [1,2,3];
[i1,i2,i3] = meshgrid(1:3);
for k = 1:numel(i1)
A = zeros(3,3);
A(i1(k),1)=1;A(i2(k),2)=2;A(i3(k),3)=3;
A       
end

但meshgrid函数只能到3维,想实现3维以上还可以怎么解决?网上也找到了meshgrid扩展到多维的方法:

function result=meshgrid5D(a,b,c,d,e)
n1=numel(a);n2=numel(b);n3=numel(c);n4=numel(d);n5=numel(e);
n=n1*n2*n3*n4*n5;
aa=reshape(full(a(:)),[1,n1,1,1,1]);
bb=reshape(full(b(:)),[n2,1,1,1,1]);
cc=reshape(full(c(:)),[1,1,1,n3,1]);
dd=reshape(full(d(:)),[1,1,n4,1,1]);
ee=reshape(full(e(:)),[1,1,1,1,n5]);
aa=aa(ones(n2,1),:,ones(n4,1),ones(n3,1),ones(n5,1));
bb=bb(:,ones(n1,1),ones(n4,1),ones(n3,1),ones(n5,1));
cc=cc(ones(n2,1),ones(n1,1),ones(n4,1),:,ones(n5,1));
dd=dd(ones(n2,1),ones(n1,1),:,ones(n3,1),ones(n5,1));
ee=ee(ones(n2,1),ones(n1,1),ones(n4,1),ones(n3,1),:);
oo=ones(n,1);
aa=reshape(aa,n,1);
bb=reshape(bb,n,1);
cc=reshape(cc,n,1);
dd=reshape(dd,n,1);
ee=reshape(ee,n,1);
result=[oo aa bb cc dd ee];

但是运行后还是显示参数过多。该如何解决此问题的多维矩阵生成?

你好,matlab分类中不是有问必答的题均由Joel的小号joel_1993回答【Joel认证】。

% n行m列的随机矩阵
n = 4;
m = 3;
a = cell(m,1);
[a{:}]= ndgrid(1:n);
a = arrayfun(@(i)a{i}(:),1:m, 'uniform', 0);
a = [a{:}];
Q = cell(size(a,1),1);
for i = 1:1:size(a,1)
    Q{i} = full(sparse(a(i,:), 1:m, 1:m));
end
celldisp(Q)% Q里的每个都是你需要的,用Q{i}可以获取

结果列举:

Q{1} =
 
     1     2     3

 
 
Q{2} =
 
     0     2     3
     1     0     0

 
 
Q{3} =
 
     0     2     3
     0     0     0
     1     0     0

 
 
Q{4} =
 
     0     2     3
     0     0     0
     0     0     0
     1     0     0

 
 
Q{5} =
 
     1     0     3
     0     2     0

 
 
Q{6} =
 
     0     0     3
     1     2     0

 
 
Q{7} =
 
     0     0     3
     0     2     0
     1     0     0

 
 
Q{8} =
 
     0     0     3
     0     2     0
     0     0     0
     1     0     0

 
 
Q{9} =
 
     1     0     3
     0     0     0
     0     2     0

 
 
Q{10} =
 
     0     0     3
     1     0     0
     0     2     0

 
 
Q{11} =
 
     0     0     3
     0     0     0
     1     2     0

 
 
Q{12} =
 
     0     0     3
     0     0     0
     0     2     0
     1     0     0

 
 
Q{13} =
 
     1     0     3
     0     0     0
     0     0     0
     0     2     0

 
 
Q{14} =
 
     0     0     3
     1     0     0
     0     0     0
     0     2     0

 
 
Q{15} =
 
     0     0     3
     0     0     0
     1     0     0
     0     2     0

 
 
Q{16} =
 
     0     0     3
     0     0     0
     0     0     0
     1     2     0

 
 
Q{17} =
 
     1     2     0
     0     0     3

 
 
Q{18} =
 
     0     2     0
     1     0     3

 
 
Q{19} =
 
     0     2     0
     0     0     3
     1     0     0

 
 
Q{20} =
 
     0     2     0
     0     0     3
     0     0     0
     1     0     0

 
 
Q{21} =
 
     1     0     0
     0     2     3

 
 
Q{22} =
 
     0     0     0
     1     2     3

 
 
Q{23} =
 
     0     0     0
     0     2     3
     1     0     0

 
 
Q{24} =
 
     0     0     0
     0     2     3
     0     0     0
     1     0     0

 
 
Q{25} =
 
     1     0     0
     0     0     3
     0     2     0

 
 
Q{26} =
 
     0     0     0
     1     0     3
     0     2     0

 
 
Q{27} =
 
     0     0     0
     0     0     3
     1     2     0

 
 
Q{28} =
 
     0     0     0
     0     0     3
     0     2     0
     1     0     0

 
 
Q{29} =
 
     1     0     0
     0     0     3
     0     0     0
     0     2     0

 
 
Q{30} =
 
     0     0     0
     1     0     3
     0     0     0
     0     2     0

 
 
Q{31} =
 
     0     0     0
     0     0     3
     1     0     0
     0     2     0

 
 
Q{32} =
 
     0     0     0
     0     0     3
     0     0     0
     1     2     0

 
 
Q{33} =
 
     1     2     0
     0     0     0
     0     0     3

 
 
Q{34} =
 
     0     2     0
     1     0     0
     0     0     3

 
 
Q{35} =
 
     0     2     0
     0     0     0
     1     0     3

 
 
Q{36} =
 
     0     2     0
     0     0     0
     0     0     3
     1     0     0

 
 
Q{37} =
 
     1     0     0
     0     2     0
     0     0     3

 
 
Q{38} =
 
     0     0     0
     1     2     0
     0     0     3

 
 
Q{39} =
 
     0     0     0
     0     2     0
     1     0     3

 
 
Q{40} =
 
     0     0     0
     0     2     0
     0     0     3
     1     0     0

 
 
Q{41} =
 
     1     0     0
     0     0     0
     0     2     3

 
 
Q{42} =
 
     0     0     0
     1     0     0
     0     2     3

 
 
Q{43} =
 
     0     0     0
     0     0     0
     1     2     3

 
 
Q{44} =
 
     0     0     0
     0     0     0
     0     2     3
     1     0     0

 
 
Q{45} =
 
     1     0     0
     0     0     0
     0     0     3
     0     2     0

 
 
Q{46} =
 
     0     0     0
     1     0     0
     0     0     3
     0     2     0

 
 
Q{47} =
 
     0     0     0
     0     0     0
     1     0     3
     0     2     0

 
 
Q{48} =
 
     0     0     0
     0     0     0
     0     0     3
     1     2     0

 
 
Q{49} =
 
     1     2     0
     0     0     0
     0     0     0
     0     0     3

 
 
Q{50} =
 
     0     2     0
     1     0     0
     0     0     0
     0     0     3

 
 
Q{51} =
 
     0     2     0
     0     0     0
     1     0     0
     0     0     3

 
 
Q{52} =
 
     0     2     0
     0     0     0
     0     0     0
     1     0     3

 
 
Q{53} =
 
     1     0     0
     0     2     0
     0     0     0
     0     0     3

 
 
Q{54} =
 
     0     0     0
     1     2     0
     0     0     0
     0     0     3

 
 
Q{55} =
 
     0     0     0
     0     2     0
     1     0     0
     0     0     3

 
 
Q{56} =
 
     0     0     0
     0     2     0
     0     0     0
     1     0     3

 
 
Q{57} =
 
     1     0     0
     0     0     0
     0     2     0
     0     0     3

 
 
Q{58} =
 
     0     0     0
     1     0     0
     0     2     0
     0     0     3

 
 
Q{59} =
 
     0     0     0
     0     0     0
     1     2     0
     0     0     3

 
 
Q{60} =
 
     0     0     0
     0     0     0
     0     2     0
     1     0     3

 
 
Q{61} =
 
     1     0     0
     0     0     0
     0     0     0
     0     2     3

 
 
Q{62} =
 
     0     0     0
     1     0     0
     0     0     0
     0     2     3

 
 
Q{63} =
 
     0     0     0
     0     0     0
     1     0     0
     0     2     3

 
 
Q{64} =
 
     0     0     0
     0     0     0
     0     0     0
     1     2     3

有帮助请给个采纳支持Joel哟