连接不同大小的1D矩阵

时间:2014-05-01 15:40:59

标签: arrays matlab concatenation

我可能会犯这个错误,但我有数据{1},数据{2} ...数据{i}。在每个中,我有.type1,.type2 .... .typeN。数组的长度不同,因此水平连接不起作用。

为简单起见

>> data{1}.type1

ans =

     1
     2
     3


>> data{2}.type1

ans =

     2
     4
     5
     6

结果应为[1; 2; 3; 2; 4; 5; 6]

我一直试图循环但不确定如何?我将有一个可变数量的文件(a,b ..)。我如何进行循环和连接?最终我需要一个1xN阵列的所有这些..

我的工作代码,谢谢......把它搞定了..

for i = 1:Types
  currentType = nTypes{i}
  allData.(currentType)=[];
  for j = 1:nData
    allData.(currentType) = [allData.(currentType); data{j}.(currentType)(:,3)]; %3rd column
  end
end

1 个答案:

答案 0 :(得分:0)

查看cat,第一个参数是维度。在您的简单示例中,它将是:

result = cat(1,a,b);

相当于:

result = [a;b];

或者您可以将它们连接为行向量并转置回列向量:

result = [a',b']';

对于单元格数组内部结构的情况,我认为没有任何方法可以循环。假设您有一个带有M元素和N“类型”的单元格数组作为每个元素的结构字段。你可以这样做:

M=length(data);
newData=struct;
for i=1:M
    for j=1:N
       field=sprintf('type%d',j); % //field name
       if (M==1), newData.(field)=[]; end % //if this is a new field, create it
       newData.(field)=[newData.(field);data{i}.(field)];
    end
 end