Matlab 生产单元阵列

Matlab 生产单元阵列,matlab,cell-array,Matlab,Cell Array,我想在matlab中生成一个单元数组,如下所示: P= {100;010;000;000;001} {100;000;010;000;001} {100;000;000;010;001} {000;100;010;000;001} {000;100;000;010;001} {000;000;100;010;001} 其中p={5x3单元}{5x3单元}{5x3单元}{5x3单元}{5x3单元}{5x3单元} 根据5x3矩阵,模式在每列中应

我想在matlab中生成一个单元数组,如下所示:

P=  {100;010;000;000;001}  
    {100;000;010;000;001} 
    {100;000;000;010;001} 
    {000;100;010;000;001} 
    {000;100;000;010;001} 
    {000;000;100;010;001}
其中
p={5x3单元}{5x3单元}{5x3单元}{5x3单元}{5x3单元}{5x3单元}

根据5x3矩阵,模式在每列中应仅为一个“1”,第三列在每个单元格的最后一行中为“1”

i、 e:
p{1}=100;010;000;000;001

我该怎么做

从我编造的到现在:

PP=zeros(5,3);
P={1,6};
P={PP,PP,PP,PP,PP,PP};
我怎样才能把那些放进牢房

非常感谢

试试这个:

x = unique(perms([0 0 2 4]),'rows'); %# we'll convert 2 to 10 and 4 to 100 later
xi = randperm(size(x,1)); %# permute rows randomly
n = 6;
xi = xi(1:n); %# k random rows
x = x(xi,:);
x = [ x ones(n,1) ]'; %# add 1s and transpose
%# convert to strings representing binary numbers, then to cell array
out = reshape(cellstr(dec2bin(x)), size(x,1), n);
%# split the cell array by columns
out = mat2cell(out, size(out,1), ones(1,n));
如果您实际需要的是数字(0、10、100),而不是字符串,则代码会稍微短一些:

x = unique(perms([0 0 10 100]),'rows');
xi = randperm(size(x,1));
n = 6;
xi = xi(1:n);
x = x(xi,:);
x = [x ones(n,1)]';
out = mat2cell(x,size(x,1),ones(1,n));
更新

根据您的评论,以下是新代码:

n = 6;
P = repmat({zeros(5,3)},1,n); %# output array preallocation

x = unique(perms([0 0 1 2]),'rows');
xi = randperm(size(x,1));
xi = xi(1:n);
x = x(xi,:);

c = [x ones(n,1)+2]'; %# column index
r = repmat((1:5)',1,n); %# row index
for k=1:n
    P{k}(sub2ind( [5 3], r(c(:,k)>0,k), c(c(:,k)>0,k) )) = 1;
end
如果需要逻辑矩阵数组,只需在第2行中用
false
替换
0即可:

P = repmat({false(5,3)},1,n);

谢谢。我需要它们是二进制的,并且每列中只有一个“一”。行组合如下:1和2;1&3;1&4;2&3;2&4;3&4; P=[5x3][5x3][5x3][5x3][5x3],其中P{1}=(第1行和第2行的组合)1 0;0 1 0; 0 0 0; 0 0 0; 0 0 1; P{2}=(第1行和第3行的组合)10;0 0 0; 0 1 0; 0 0 0; 0 0 1; P{6}=0;0 0 0; 1 0 0; 0 1 0; 0 0 1;