我在矩阵中得到了一个数据集,如下所示(从 Excel 导入):
matrix =
Cat1 1 2 3 4
Cat2 9 10 11 12
Cat3 17 18 19 20
Cat1 5 6 7 8
Cat2 13 14 15 16
Cat3 21 22 23 24
我想将它重新整形为 3 个大小相同的向量(每个类别一个),以绘制堆叠条形图。向量在 reshape 操作后应该看起来像这样(如果向量具有第一列的名称并且矩阵可以是任意大小,那就太好了):
cat1 = [ 1 2 3 4 5 6 7 8]
cat2 = [ 9 10 11 12 13 14 15 16]
cat3 = [17 18 19 20 21 22 23 24]
我真诚地希望这不是重复的。在其他 reshape 问题的帮助下,我无法产生可行的解决方案。
最佳答案
如果你的数据是一个矩阵,你可以在索引时操纵行的顺序,所以你可以这样做:
rows = reshape(1:size(matrix, 1), n, []).';
res = reshape(matrix(rows, :).', [], n).';
生成的矩阵 res
由连接的行组成。
此解决方案也适用于元胞数组,但您需要额外的 cell2mat
才能将结果转换为矩阵。
例子
matrix = [1:4; 9:12; 17:20; 5:8; 13:16; 21:24];
n = 3;
rows = reshape(1:size(matrix, 1), n, []).';
res = reshape(matrix(rows, :).', [], n).';
结果是:
res =
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
关于matlab - 连接每第 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16437937/