给定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哟