【问题标题】:MATLAB : how to split and transpose a cell array?MATLAB:如何拆分和转置元胞数组?
【发布时间】:2016-04-29 21:10:00
【问题描述】:

我有下一个单元格组合(30*1 大小),重要的是要注意这是一个由数字而不是字符串组成的单元格数组。

我要做的是先拆分它,根据“,”,所以每个不同的数字必须占据不同的列。像这样:

在这之后,我想转置所有的数字,所以我想要一个最终的矩阵大小(7*30)

谁能帮我解决这个问题?

提前致谢!

【问题讨论】:

  • 你能发布更好的示例数据吗?也许实际上是在您的问题中输入了一小部分数据,而不是使用屏幕截图。我看不懂。
  • 是的,让 a={12,13,14,45;4,8,nan,nan;450,2,14,nan} 我想创建矩阵 B [ 12 13 14 45; 4 8 南450 2 14 NaN] 大小为 3*4 然后我想将其转置为 C [ 12 4 450; 13 8 2; 14 南 14; 45 NaN NaN] 大小 4*3。非常感谢@Suever

标签: arrays matlab split cell transpose


【解决方案1】:

查看您在问题中输入的两张图片(尽管它们对我来说看起来像是在 Excel 中),我想您有一个包含 30 个列表的单元格数组(双数组;数组的条目类型为编号/双倍的)。这里我用 2 而不是 30 放了一个更短的例子。

dataInput={[1,2,3,4,5,6,7];[0,-1,0.5,2,5,6,7]}

它是一个2×1 cell array,它的每个条目都是一个1x7 array of doubles。现在回答您问题的第一部分,即将列表的条目分开以将每个数字作为一个单元格,而不是将 7 个数字的整个列表作为一个单元格,我使用num2cell。对于您问题的第二部分,转置单元格,我只需添加'(单引号)。为了将所有这些单元格混合到单个单元格阵列中,我使用了括号。所以这里有一种方法可以让您随心所欲地拥有7×2 cell array

dataOutput=[num2cell(dataInput{1})',num2cell(dataInput{2})']

您还可以在末尾(外部)使用' 运算符,如下所示。

dataOutput2=[num2cell(dataInput{1});num2cell(dataInput{2})]'
% or
dataOutput3=vertcat(num2cell(dataInput{1}),num2cell(dataInput{2}))'

【讨论】:

    【解决方案2】:

    这是我的解决方案版本,在 Matlab 的命令行窗口中输入:

    >> a={12,13,14,45;4,8,nan,nan;450,2,14,nan};  %% cell array
    >> b=cell2mat(a); %% convert cell array to ordinary array of the underlying data type
    >> c=transpose(b) %% transpose matrix b (or use the following syntax b.')
    

    一些有用的链接

    1. cell2mat
    2. transpose

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2011-02-07
      • 1970-01-01
      相关资源
      最近更新 更多