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

时间:2016-02-12 16:12:51

标签: matlab

例如。我将[1;1;0;0;1;0;0;0;1;1;1;0]作为列,我希望输出四个元素的组:

1100
1000
1110

怎么做?我尝试使用accumarray(),但它无效。

2 个答案:

答案 0 :(得分:1)

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

bvec = [1;1;0;0;1;0;0;0;1;1;1;0];
bvec = char(reshape( bvec, 4, numel(bvec)/4 ) + '0').';

让我们分解一下:

  • reshape( bvec, numel(bvec)/4, 4 ); 打破你的列向量(也可能是行向量)到一个有4行的矩阵(你的4位[?]组),它是一个4 * n类型为double的矩阵,
  • + '0'添加数值48以表示ASCII字符' 0&#39 ;;这会将0的所有值转换为48(ASCII' 0')以及149的所有值(ASCII& #39; 1&#39)
  • char( ... )将您的矩阵转换为字符类型矩阵。
  • .'将矩阵转置到最后,得到一个n * 4矩阵。

<强>结果:

bvec =

1100
1000
1110

答案 1 :(得分:0)

这是怎么回事?

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 char数组:

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'