【问题标题】:Vertically concatenate part of cell contents垂直连接部分单元格内容
【发布时间】:2014-04-16 16:07:38
【问题描述】:

在 MatLab 中,我的 60x1-cellarray 中的所有单元格都包含一个 10x1 双精度。

我想垂直连接所有这些双精度,除了每个双精度的第一个数字。

我的失败尝试是:

CellArray={[1 2 3];[1 2 3];[1 2 3]}
ContacenatedCellArray = vertcat(CellArray{:,1}(2:end))

这显然不起作用,因为CellArray{:,1} 指的是多个单元格,所以(2:end) 有点傻。

你有什么建议吗?

提前致谢!

【问题讨论】:

    标签: arrays matlab select concatenation cell-array


    【解决方案1】:

    为什么不分两行做呢:

    temp = vertcat(CellArray{:}); %// or cell2mat(CellArray)
    temp2 = temp(:,2:end)';
    ContacenatedCellArray = temp2(:);
    

    【讨论】:

    • 这导致[2 3; 2 3; 2 3],我正在寻找[2 ; 3 ; 2 ;3 ;2 ;3]。对不起,我不清楚
    • @user3410778 你的问题并不清楚。请参阅我对该解决方案的编辑。
    • 经验教训。我不仅要解释问题,还要弄清楚所需的输出是什么 :-) 感谢您两次解决我的问题!
    【解决方案2】:

    试试这个 -

    %%// Vertically concatenated array
    ContacenatedCellArray = cell2mat(CellArray); 
    
    %%// Use the first index of every double array to remove those
    ContacenatedCellArray(1:10:end)=[]; 
    

    【讨论】:

    • 这导致[1 1 2 2 2 3 3 3 ]。还是我做错了?
    • @user3410778 10 用于您的实际数据,对于您的示例数据使用3。在此之后您仍然需要转置。
    • 那是愚蠢的......对不起。现在我注意到这与我提出的解决方法相同。另一个教训是,在将其粘贴到 MatLab 中之前先查看解决方案,看看它是否有效。这整个stackoverflow的事情并不像我想象的那么容易......
    【解决方案3】:

    好的。我找到了解决方法。只需在连接所有内容后删除第一个双精度即可。不漂亮,但它的工作...

    ContacenatedCellArray(1:length(CellArray{1,1}):end)=[];

    感谢您的帮助!

    【讨论】:

      【解决方案4】:

      有一种在连接之前进行选择的单行解决方案

      cell2mat(arrayfun(@(x) x{1}(2:end), CellArray, 'UniformOutput', 0))
      

      输入与输出

      CellArray={(1:4)';(1:4)';(1:4)'}
      
      ans =
      
           2
           3
           4
           2
           3
           4
           2
           3
           4
      

      【讨论】:

      • 这适用于您的 CellArray 但不适用于我的...您的是 {[1;2;3;4][1;2;3;4]} 而我的是 {[1 2 3] ;[1 2 3]}
      • 我明白这一点。但是问题的文本contain a 10x1 double 与示例[1 2 3] 之间存在行/列不匹配
      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2012-10-22
      • 1970-01-01
      • 2017-10-28
      • 2018-07-09
      相关资源
      最近更新 更多