Matlab:将一个单元阵列分成两个列单元的排列

时间:2017-09-26 15:14:14

标签: arrays matlab cell

假设我有这个单元格数组:

in={'A' 'B' 'C'};

我希望在两列中将\t的{​​{1}}分开排列为:

in

对于长度为4的单元格out= 'A' 'B C' 'B' 'A C' 'C' 'A B' 'A B' 'C' 'A C' 'B' 'B C' 'A' in={'A' 'B' 'C' 'D'}中应该有14个不同的行,例如out。如何获取长度为'A B' 'C D'的任何单元格out的{​​{1}}?

请注意,inn等是输入的示例。期望代码一般处理字符串。 A等可以是输入单元格B中的元素的示例,而不是'Alice02' '_Tom'

1 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案:

str = {'John02' 'Alice_' '4_Tom'}
[x y]=find(dec2bin(0:2^numel(str)-1)=='1');
p = accumarray(x,y,[],@(z){sprintf('%s\t',str{z})});
out = [p(2:numel(p)/2) p(end-1:-1:numel(p)/2+1)];

如果您只使用信件,可以使用此信息:

str = 'ABCD';
[x y]=find(dec2bin(0:2^numel(str)-1)=='1');
p = accumarray(x,char(y+64),[],@(z){z.'});
out = [p(2:numel(p)/2) p(end-1:-1:numel(p)/2+1)];

结果:

out =
{
  [1,1] = D
  [2,1] = C
  [3,1] = CD
  [4,1] = B
  [5,1] = BD
  [6,1] = BC
  [7,1] = BCD
  [1,2] = ABC
  [2,2] = ABD
  [3,2] = AB
  [4,2] = ACD
  [5,2] = AC
  [6,2] = AD
  [7,2] = A
}

* Octave中的等效解决方案:

p = powerset('A':'D');
out = [p(2:numel(p)/2) ;p(end-1:-1:numel(p)/2+1)].';