【问题标题】:Concatenating 1D matrices of different sizes连接不同大小的一维矩阵
【发布时间】:2014-05-01 15:40:58
【问题描述】:

我可能搞错了,但我有数据{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

【问题讨论】:

  • [a;b]。或vertcat(a,b)。或c = {a,b}; vertcat(c{:})
  • 解释您的输入数据并不是“离题”。根据您的 cmets,您的示例代码似乎太简单而无法解释您的实际问题。尝试一些更接近您需要的示例代码。

标签: arrays matlab concatenation


【解决方案1】:

看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

【讨论】:

  • 是的,但是如果我有 N 个要连接的东西怎么办?
  • 假设它们按照您上面的建议在一个单元格数组中,result = vertcat(data{:}) 或 result=cat(1,data{:})
  • 我需要连接 data{1}.type1 和 data{2}.type1 ... type2, type3...N 相同
  • 我认为这就是您要查找的内容,N 是数据中值的数量还是“类型”的数量。如果是类型的数量,我强烈建议您更改格式,因为动态寻址结构名称并不有趣。
  • 谢谢,但这是我尝试过的,它将所有内容连接到一列中。我需要多个列或结构元素。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
相关资源
最近更新 更多