2016-02-12 573 views
-2

例如,我有[1;1;0;0;1;0;0;0;1;1;1;0]这列作为列,我想输出四个元素的组:如何在matlab中对矩阵中的元素进行分组?

1100 
1000 
1110 

如何做到这一点?我用accumarray()尝试过,但它不起作用。

+0

不知道你真正想要的输出,你可以把它在实际Matlab的语法到你的问题? 3个整数或3x4矩阵的数组?或者也许别的东西? – Daniel

+0

查看索引方法,'reshape'和'num2str'函数。 HTH –

+0

我有[1; 1; 0; 0; 1; 0; 0; 0; 1; 1; 1; 0]这列作为列,我想输出四个元素的组:'1100''1000''1110 '像这样不像字符串 – Snehal

回答

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字符数组:

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' 
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类型的双精度矩阵,
  • + '0'添加48的数值来表示ASCII字符'0';这个转换的0所有值48(ASCII字符“0‘)和149(ASCII字符’1”)
  • char(...)你的矩阵转换为字符类型矩阵中的所有值。
  • .'将矩阵置换到最后得到n * 4矩阵。

结果:

bvec = 

1100 
1000 
1110 
+0

您需要在重塑后转置矩阵,否则列/行索引将会出错。或者,也可以加载行向量而不是列向量。 – GameOfThrows

+0

是的,它工作在我想要的方式。 – Snehal

+0

@GameOfThrows,Snehal - 你是对的,这需要修复。但我现在必须离开! ;) –

相关问题