如果MATLAB Rb2020中的行和列维度不一致,如何取消嵌套数据和文本内容的单元格数组的嵌套?

如果MATLAB Rb2020中的行和列维度不一致,如何取消嵌套数据和文本内容的单元格数组的嵌套?,matlab,text,double,cell,unnest,Matlab,Text,Double,Cell,Unnest,我有一个(72x1单元格),其内容由以下块/部分定义: COLUMN1 ROW1 Text Nr.1 ROW2 2345x3 double ROW3 Text Nr.2 …乘以24以获得所述72x1单元阵列 我现在的目标是以某种方式取消2345x3双内容的测试,即获得以下数据顺序: COLUMN1 COLUMN2 COLUMN3

我有一个(72x1单元格),其内容由以下块/部分定义:

          COLUMN1
ROW1      Text Nr.1
ROW2      2345x3 double
ROW3      Text Nr.2
…乘以24以获得所述72x1单元阵列

我现在的目标是以某种方式取消2345x3双内容的测试,即获得以下数据顺序:

                     COLUMN1             COLUMN2        COLUMN3
                     Text Nr.1          (empty)         (empty)
                      value 1            value 1        value 1
                      value 2            value 2        value 2
                      value 3            value 3        value 3
                      value 4            value 4        value 4
                      value 5            value 5        value 5
                      value 6            value 6        value 6
                      value 7            value 7        value 7
                       etc.               etc.           etc.
                      Text Nr.2           (empty)       (empty)
                      Text Nr.1           (empty)       (empty)
                       value 1            value 1        value 1
                       value 2            value 2        value 2
                       value 3            value 3        value 3
                       value 4            value 4        value 4
                       value 5            value 5        value 5
                       value 6            value 6        value 6
                       value 7            value 7        value 7
                       etc.               etc.           etc.
                       Text Nr.2          (empty)        (empty)
我想使用for循环,以防行数发生变化。然而,我甚至不确定如何处理这个问题?(重塑,cellfun?)

这就是为什么我想问你,你心中是否有一个密码


注意:对于在CAD程序中生成几何结构的宏,我需要此数据结构。您可以使用以下内容:

x={'lorem';[1 2 3;4 5 6;7 8 9;2344*3+1 2344*3+2 2344*3+3];'ipsum'; ...
   'dolor';-[1 2 3;4 5 6;7 8 9;2344*3+1 2344*3+2 2344*3+3];'sit amet'};

m={};
for i=1:floor(numel(x)/3) %ignore trailing garbage (incomplete entry)
  k=x{3*(i-1)+2};
  m=[ m ; ...
      x(3*(i-1)+1) cell([1 size(k,2)-1]) ; ...
      mat2cell( k, ones([size(k,1) 1]), ones([size(k,2) 1]) ) ; ...
      x(3*(i-1)+3) cell([1 size(k,2)-1]) ];
end

因为for循环在您的用例中只执行24次迭代,所以我相信这种方法应该是相当有效的。

我尝试过它,它可以根据不同的行大小来工作。请你也解释一下你在这个代码背后的想法好吗?我很想了解您的想法,当然,我们的想法是对输入三元组
(text1,matrix,text2)
,它们是数据中最高级别的重复单元,一次一个。对于每个输入三元组,将包含
text1
的1×n单元向量附加到输出,然后是m×n单元矩阵,最后是包含
text2
的1×n单元向量。更具体地说,两行向量在第一个条目中包含各自的文本,并用(n-1)个空双数组右填充(即
[]
);将m×n双矩阵分解为m×n个独立标量,这些标量排列为单元矩阵。这个算法现在有意义了吗?是的。现在我可以按照你的方法了。我还尝试通过添加更多文本来扩展您的代码,以便创建一个六人组,结果成功了!很高兴能帮忙!