MATLAB连接具有不等维度的矩阵

时间:2011-06-01 22:34:42

标签: matlab matrix concatenation

有没有简单的方法可以使用零填充来连接具有不等维度的矩阵?

short = [1 2 3]';
long = [4 5 6 7]';
desiredResult = horzcat(short, long);

我想要像:

desiredResult = 
1 4 
2 5
3 6
0 7

3 个答案:

答案 0 :(得分:5)

当您分配到矩阵当前边界之外的索引时,MATLAB中的矩阵会自动生成并用零填充。例如:

>> short = [1 2 3]';
>> long = [4 5 6 7]';
>> desiredResult(1:numel(short),1) = short;  %# Add short to column 1
>> desiredResult(1:numel(long),2) = long;    %# Add long to column 2
>> desiredResult

desiredResult =

     1     4
     2     5
     3     6
     0     7

答案 1 :(得分:1)

编辑:

我已经编辑了我之前的解决方案,因此您不必为该函数提供maxLength参数。该函数在进行填充之前计算它。

function out=joinUnevenVectors(varargin)
%#Horizontally catenate multiple column vectors by appending zeros 
%#at the ends of the shorter vectors
%#
%#SYNTAX: out = joinUnevenVectors(vec1, vec2, ... , vecN)

    maxLength=max(cellfun(@numel,varargin));
    out=cell2mat(cellfun(@(x)cat(1,x,zeros(maxLength-length(x),1)),varargin,'UniformOutput',false));

将它作为一个函数的便利之处在于,您可以轻松地将多个不均匀向量作为joinUnevenVectors(vec1,vec2,vec3,vec4)连接在一行中,依此类推,而无需在每行中手动输入它。

实施例

short = [1 2 3]';
long = [4 5 6 7]';
joinUnevenVectors(short,long)

ans =

     1     4
     2     5
     3     6
     0     7

答案 2 :(得分:1)

当写入矩阵的不存在元素时,Matlab会自动执行填充。 因此,另一个非常简单的方法是:

  

短= [1; 2; 3];

     

长= [4; 5; 6; 7];

     

短(1:长度(长),2)=长;