如何在 MATLAB 中连接向量以创建非矩形矩阵?
How can I concatenate vectors to create non-rectangular matrices in MATLAB?
有没有办法创建非矩形矩阵?例如,如果我有一个矩阵 a=[6 8 10]
和另一个矩阵 b=[1 5]
,我可以将它们垂直连接以获得一行中的 [6 8 10]
和另一行中的 [1 5]
吗?
直接的答案是否。 MATLAB 不支持 ragged or non-rectangular or non-square matrices。解决此问题的一种方法是创建一个元胞数组,其中每个元胞都是一个长度不等的向量。
类似于:
a = [6 8 10];
b = [1 5];
c = cell(1,2);
c{1} = a;
c{2} = b;
celldisp(c)
c{1} =
6 8 10
c{2} =
1 5
另一种方法是创建一个矩阵,其中不包含任何内容的值将映射到预设数字,例如零。因此,您可以将 a
和 b
连接成一个矩阵,使其变为 [6 8 10; 1 5 0];
。如果这是你喜欢的,你可以这样做:
a = [6 8 10];
b = [1 5];
c = zeros(2, 3);
c(1,1:numel(a)) = a;
c(2,1:numel(b)) = b;
disp(c)
6 8 10
1 5 0
关于这个特定主题的更全面的论文可以在 gnovice 的回答中找到:How can I accumulate cells of different lengths into a matrix in MATLAB?
乔纳斯创建了另一个相关答案:How do I combine uneven matrices into a single matrix?
有没有办法创建非矩形矩阵?例如,如果我有一个矩阵 a=[6 8 10]
和另一个矩阵 b=[1 5]
,我可以将它们垂直连接以获得一行中的 [6 8 10]
和另一行中的 [1 5]
吗?
直接的答案是否。 MATLAB 不支持 ragged or non-rectangular or non-square matrices。解决此问题的一种方法是创建一个元胞数组,其中每个元胞都是一个长度不等的向量。
类似于:
a = [6 8 10];
b = [1 5];
c = cell(1,2);
c{1} = a;
c{2} = b;
celldisp(c)
c{1} =
6 8 10
c{2} =
1 5
另一种方法是创建一个矩阵,其中不包含任何内容的值将映射到预设数字,例如零。因此,您可以将 a
和 b
连接成一个矩阵,使其变为 [6 8 10; 1 5 0];
。如果这是你喜欢的,你可以这样做:
a = [6 8 10];
b = [1 5];
c = zeros(2, 3);
c(1,1:numel(a)) = a;
c(2,1:numel(b)) = b;
disp(c)
6 8 10
1 5 0
关于这个特定主题的更全面的论文可以在 gnovice 的回答中找到:How can I accumulate cells of different lengths into a matrix in MATLAB?
乔纳斯创建了另一个相关答案:How do I combine uneven matrices into a single matrix?