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

Posted

技术标签:

【中文标题】如果 MATLAB Rb2020 中的行和列维度不一致,如何取消嵌套具有嵌套数据和文本内容的元胞数组?【英文标题】:How to unnest a cell array with nested data and text content if the row and column dimensions do not agree with each other in MATLAB Rb2020? 【发布时间】:2021-03-04 21:31:54 【问题描述】:

我有一个(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 循环,以防行数发生变化。但是我不确定如何解决这个问题? (重塑,细胞乐趣?)

这就是为什么我想问你是否有代码?

注意:我需要此数据结构用于在 CAD 程序中生成几何结构的宏

【问题讨论】:

【参考方案1】:

你可以这样使用:

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=x3*(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 双精度矩阵由排列为单元矩阵的 n 个单独的标量分解为 m。这个算法现在有意义吗? 是的。现在我可以按照你的方法。我还尝试通过添加更多文本来扩展您的代码,以创建一组六个并成功! 很高兴能帮上忙!

以上是关于如果 MATLAB Rb2020 中的行和列维度不一致,如何取消嵌套具有嵌套数据和文本内容的元胞数组?的主要内容,如果未能解决你的问题,请参考以下文章

matlab 交换矩阵的行和列

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

绘制二维矩阵的行和列

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

读取特定的行和列 C++

使用属性窗口在 QT 网格布局中设置小部件的行和列