如果MATLAB Rb2020中的行和列维度不一致,如何取消嵌套数据和文本内容的单元格数组的嵌套?
我有一个(72x1单元格),其内容由以下块/部分定义:如果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
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个独立标量,这些标量排列为单元矩阵。这个算法现在有意义了吗?是的。现在我可以按照你的方法了。我还尝试通过添加更多文本来扩展您的代码,以便创建一个六人组,结果成功了!很高兴能帮忙!