如何在matlab中对矩阵中的元素进行分组?

如何在matlab中对矩阵中的元素进行分组?,matlab,Matlab,例如,我有[1;1;0;0;1;0;0;0;1;1;1;0]这个列,我想输出四个元素的组: 1100 1000 1110 bvec = [1;1;0;0;1;0;0;0;1;1;1;0]; bvec = char(reshape( bvec, 4, numel(bvec)/4 ) + '0').'; 如何做到这一点?我用accumarray()试用过,但不起作用。这是怎么回事 A = [1;1;0;0;1;0;0;0;1;1;1;0]; B = reshape(A,4,3)'; %//DON

例如,我有
[1;1;0;0;1;0;0;0;1;1;1;0]
这个列,我想输出四个元素的组:

1100
1000
1110
bvec = [1;1;0;0;1;0;0;0;1;1;1;0];
bvec = char(reshape( bvec, 4, numel(bvec)/4 ) + '0').';
如何做到这一点?我用accumarray()试用过,但不起作用。

这是怎么回事

A = [1;1;0;0;1;0;0;0;1;1;1;0];
B = reshape(A,4,3)'; %//DONT FORGET THE `'` or your results would be wrong...
C = strcat(num2str(B)); %C is a char Array currently

C =

1  1  0  0
1  0  0  0
1  1  1  0
删除空间:

你可以做C(:,2:3)=[];C(:,3:4)=[];C(:,4:5)=[];要创建3 x 4字符数组,请执行以下操作:

C =

1100
1000
1110
但你为什么会对呢?因此,更好的方法是:

regexprep(cellstr(C),'[^\w'']','');  %//Now a cell Array. It is generally better practice to store strings as Cell Array instead of Char Array.

ans = 

'1100'
'1000'
'1110'

假设您的向量只包含元素0和1,并且有n*4个元素:

1100
1000
1110
bvec = [1;1;0;0;1;0;0;0;1;1;1;0];
bvec = char(reshape( bvec, 4, numel(bvec)/4 ) + '0').';
让我们把它分解一下:

  • 重塑(bvec,numel(bvec)/4,4)
    将列向量(也可以是行向量)分解为一个有4行的矩阵(4位[?]组),它是一个类型为double的4*n矩阵
  • +'0'
    添加一个48的数值来表示ASCII字符“
    0
    ”;这将
    0
    的所有值转换为
    48
    (ASCII'
    0
    ),并将
    1
    的所有值转换为
    49
    (ASCII'
    1
  • char(…)
    将矩阵转换为字符类型矩阵
  • 在最后转置矩阵,得到一个n*4矩阵
结果:

bvec =

1100
1000
1110

不确定您真正想要的是什么输出,您能用实际的Matlab语法将其放入您的问题中吗?3个整数的数组还是3x4矩阵?或者其他什么?看看索引方法、
重塑
num2str
函数。HTHI有[1;1;0;0;1;0;0;0;1;1;1;1;0]这是列,我想输出四个元素的组:“1100”“1000”“1110”这样不是作为字符串的矩阵你想你的结果也是字符串吗?仅作为字符串,而在这里整形不起作用……你需要在整形后转置矩阵,否则列/行索引将是错误的。或者加载行向量而不是列向量。@行,Snehal-你是对的,这需要修复。但我现在得走了!;)@增加了换位,修正了我的解决方案。见上文。)如果您对该答案满意,请按“接受”复选框。