Matlab:按行组合多个矩阵

Posted

技术标签:

【中文标题】Matlab:按行组合多个矩阵【英文标题】:Matlab: combining multiple matrices row-wise 【发布时间】:2018-05-31 23:03:49 【问题描述】:

我有 10 个矩阵中的一些数据。每个矩阵的行数不同,但列数相同。

我想将所有 10 个矩阵按行交错组合成一个矩阵,这意味着该矩阵中的行将如下所示:

row 1 from matrix 0
...
row 1 from matrix 9
row 2 from matrix 0
...
row 2 from matrix 9
...

示例(包含 3 个矩阵):

Matrix 1: [1 2 3 ; 4 5 6; 7 8 9] Matrix 2: [3 2 1 ; 6 5 4] Matrix 3: [1 1 1 ; 2 2 2 ; 3 3 3] Combined matrix will be: [1 2 3 ; 3 2 1 ; 1 1 1 ; 4 5 6 ; 6 5 4 ; 2 2 2 ; 7 8 9 ; 3 3 3]

【问题讨论】:

您需要reshapevertcat 的组合或使用[ _ , _ ](水平)和[ _ ; _ ](垂直)的连接 我对 matlab 还很陌生,因此对如何开始不太了解。如果您可以发布一个代码,以便我可以从中学习,我将不胜感激。 提供的例子。 嗯,直接的方法是通过填充NaNs,组合,然后删除NaN 行,使所有矩阵的大小相同,但这感觉有点像一个黑客。 【参考方案1】:

你可以在这里下载功能interleave2https://au.mathworks.com/matlabcentral/fileexchange/45757-interleave-vectors-or-matrices

z = interleave2(a,b,c,'row')

你当然可以在源代码中看到函数的工作方式

【讨论】:

谢谢,但矩阵 z 不是按行组合的,是吗?【参考方案2】:

这是一个通用解决方案,可让您将任意数量的矩阵(列数匹配)放入起始cell arrayResult

Result = Matrix1, Matrix2, Matrix3;
index = cellfun(@(m) 1:size(m, 1), Result);
[~, index] = sort([index:]);
Result = vertcat(Result:);
Result = Result(index, :);

这将为每个矩阵生成一个索引向量1:m,其中m 是它的行数。通过连接这些索引和sorting 它们,我们可以获得一个新索引,该索引可用于对vertically-concatenated 矩阵集的行进行排序,从而使它们交错。

【讨论】:

以上是关于Matlab:按行组合多个矩阵的主要内容,如果未能解决你的问题,请参考以下文章

matlab中cell数组问题

matlab 多个矩阵保存问题

matlab中如何将多个矩阵保存到同一个矩阵中?

如何用Python生成多个随机矩阵

MATLAB中怎么用disp输出多个矩阵

matlab,怎样读取多个mat文件再保存为一整个矩阵mat文件?