如何在matlab中用不同行数的不同矩阵创建矩阵?

如何在matlab中用不同行数的不同矩阵创建矩阵?,matlab,matrix,Matlab,Matrix,我在matlab中有一个for循环,我想用不同的矩阵和不同的行数来做一个矩阵,我不知道行数的不同是什么。例如,我有两个矩阵,分别是10x1和4x1。我怎样才能从它们两个中得到一个矩阵。在这种情况下,我知道它们的区别是什么,但在我的循环中,我不知道它们的区别 A = 0.1000 0.5000 0.6000 0.8000 0.3000 0.2000 0.7000 0.6000 0.1000 1.0000 B =

我在matlab中有一个for循环,我想用不同的矩阵和不同的行数来做一个矩阵,我不知道行数的不同是什么。例如,我有两个矩阵,分别是10x1和4x1。我怎样才能从它们两个中得到一个矩阵。在这种情况下,我知道它们的区别是什么,但在我的循环中,我不知道它们的区别

A =

    0.1000
    0.5000
    0.6000
    0.8000
    0.3000
    0.2000
    0.7000
    0.6000
    0.1000
    1.0000

B =

    0.1000
    0.2000
    0.3000
    0.4000

C =

    0.1000    0.1000
    0.5000    0.2000
    0.6000    0.3000
    0.8000    0.4000
    0.3000       NaN
    0.2000       NaN
    0.7000       NaN
    0.6000       NaN
    0.1000       NaN
    1.0000       NaN
我希望我的最后一个矩阵像C。

双数组 只要结果是矩形的,就可以通过将其他矩阵连接在一起在MATLAB中创建矩阵。 因此,根据您的示例,可以通过执行以下操作创建新的矩阵/向量,因为串联会产生矩形输出:

u   = rand(10,1);
v   = rand(4,1);
newVector = [u;v];
但是,不能简单地将u和v连接到不同的列中,因为它们的行数不同。 因此,需要某种填充来平衡行数:

newMatrix = [ u , [v ; zeros(length(u)-length(v),1)]];
其中v的不存在行已由0的向量填充。 如果需要NaN填充,只需将零向量乘以NaN即可。 如果不知道u或v的长度是否更大,可以执行以下操作:

maxRows   = max([length(u),length(v)]);
nFillRows = abs(length(u) - length(v));

%   The fill vector will be empty if the vector has the maximum number of rows
uColumn   = [u ; zeros( nFillRows * (length(u) ~= maxRows) ,1)];
vColumn   = [v ; zeros( nFillRows * (length(v) ~= maxRows) ,1)];

newMatrix = [uColumn,vColumn];
为了使其工作,需要知道要添加的行数。 这可以递归设置,以使新矩阵越来越大,但如果u或v是矩阵而不是向量,则可能需要使用size;但是,动态增长的阵列可能会对性能造成很大影响

细胞阵列 如果for循环的目的是生成一个向量列表,您只需要存储这些向量并在以后使用,那么单元格数组可能是一个很好的数据结构:

vectorStorage = {u,v};
由于单元数组的每个元素都可以有自己单独的数据类型,所以u和v的长度不同并不重要。 在命令行中,您将看到以下内容:

>> vectorStorage = {u,v}

vectorStorage = 

    [10x1 double]    [4x1 double]
第一个元素是向量u,第二个元素是向量v。 您可以通过用大括号指定索引来调用存储的值:allu==vectorStorage{1}==1。

如果您的第一个向量是A,则通过M=A创建M,然后对于要添加的每个新向量,可以使用以下代码:

if length(B)>size(M,1)
    M=[M;nan(length(B)-size(M,1),size(M,2))];
    M=[M B];
else
    M=[M [B;nan(size(M,1)-length(B),1)]];
end

尽管Troy建议使用单元数组对于这种情况来说是个好主意。

如果10x1矩阵是a,4x1矩阵是B,那么可以使用M=[a;B]。如果要添加另一个Nx1矩阵C,请执行M=[M;C]。感谢您的回复。但是我想要的是A和B的组合,作为一个10×2列的矩阵,矩阵B中缺少的行为零或NAN。谢谢你的完整答案。