如何在matlab中对矩阵中的元素进行分组?
例如,我有[1;1;0;0;1;0;0;0;1;1;1;0]
这列作为列,我想输出四个元素的组:如何在matlab中对矩阵中的元素进行分组?
1100
1000
1110
如何做到这一点?我用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个元素:
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
‘)和1
至49
(ASCII字符’1
”) -
char(...)
你的矩阵转换为字符类型矩阵中的所有值。 -
.'
将矩阵置换到最后得到n * 4矩阵。
结果:
bvec =
1100
1000
1110
您需要在重塑后转置矩阵,否则列/行索引将会出错。或者,也可以加载行向量而不是列向量。 – GameOfThrows
是的,它工作在我想要的方式。 – Snehal
@GameOfThrows,Snehal - 你是对的,这需要修复。但我现在必须离开! ;) –
不知道你真正想要的输出,你可以把它在实际Matlab的语法到你的问题? 3个整数或3x4矩阵的数组?或者也许别的东西? – Daniel
查看索引方法,'reshape'和'num2str'函数。 HTH –
我有[1; 1; 0; 0; 1; 0; 0; 0; 1; 1; 1; 0]这列作为列,我想输出四个元素的组:'1100''1000''1110 '像这样不像字符串 – Snehal