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]
【问题讨论】:
您需要reshape
和vertcat
的组合或使用[ _ , _ ]
(水平)和[ _ ; _ ]
(垂直)的连接
我对 matlab 还很陌生,因此对如何开始不太了解。如果您可以发布一个代码,以便我可以从中学习,我将不胜感激。
提供的例子。
嗯,直接的方法是通过填充NaN
s,组合,然后删除NaN
行,使所有矩阵的大小相同,但这感觉有点像一个黑客。
【参考方案1】:
你可以在这里下载功能interleave2
https://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:按行组合多个矩阵的主要内容,如果未能解决你的问题,请参考以下文章