如果 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中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。