matlab - 连接每第 n 行

标签 matlab vector matrix

我在矩阵中得到了一个数据集,如下所示(从 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/

相关文章:

c++ - C++中 vector 的指针算法

c++ - 找到 vector 中所有值之间的相似距离并将它们子集化

r - 使用 R 中矩阵中不同行的值填充矩阵中的缺失值

Matlab:从矩阵中仅提取奇数列

matlab - 在 MATLAB 中采样数据

matlab - 在不知道大小的情况下在Matlab中预分配空间?

c++ - 将 Vector * 转换为 char *

matlab - 在 MATLAB 中使用 for 循环绘制图形

matlab - 在 MATLAB 中从文件中读取图像

c# - 实例着色器的矩阵设置