如果行和列尺寸在 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?
我有一个(72x1 单元格),其内容由以下 block/section 定义:
COLUMN1
ROW1 Text Nr.1
ROW2 2345x3 double
ROW3 Text Nr.2
...乘以 24 得到提到的 72x1 元胞数组
我现在的目标是以某种方式取消嵌套 2345x3 double 内容,从而获得以下数据顺序:
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 循环,以防行数发生变化。但是我什至不确定如何解决这个问题? (reshape, 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 次迭代,我相信这种方法应该相当有效。
我有一个(72x1 单元格),其内容由以下 block/section 定义:
COLUMN1
ROW1 Text Nr.1
ROW2 2345x3 double
ROW3 Text Nr.2
...乘以 24 得到提到的 72x1 元胞数组
我现在的目标是以某种方式取消嵌套 2345x3 double 内容,从而获得以下数据顺序:
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 循环,以防行数发生变化。但是我什至不确定如何解决这个问题? (reshape, 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 次迭代,我相信这种方法应该相当有效。