将字符串的单元数组转换为Matlab结构体

3
我需要创建一个Matlab结构,如下所示: ds = struct('name',{{'my_name_is'},{'matlab_thining_hair'}}) 它以1x2结构数组的形式存储,并具有名为“name”的字段。调用ds.name会生成以下输出:

ds.name

ans = 'my_name_is'

ans = 'matlab_thining_hair'

请注意输出中的单引号,它们很重要。因此,我需要使用以下变量创建上述结构: X = [1x46 char] [1x47 char],即1x2单元格,我认为实际上是字符串的单元格数组。除了其他事情外,我已经尝试过以下操作:

Y = cell2struct(X,'name',1)'

这将导致一个带有名称字段的1x2结构数组,但对Y的调用将生成以下输出:

Y.name

ans = my_name_is

ans = matlab_thining_hair

请注意,输出中的单引号缺失,尽管Y和ds都是具有名称字段的1x2结构数组,但字段值的格式不同,并且结构的字节大小也不同。如何将字段值格式化为字符数组?
2个回答

1

在调用cell2struct之前,将您的char字符串放入另一层单元格中。而不是:

X = { 'foo', 'bar' }

尝试:

X = { {'foo'}, {'bar'} }

也就是说,一个1x2的单元格,其单元格内容本身就是单元格,而不是字符。然后cell2struct(X, 'name', 1)应该会给你一个结构体数组,其中包含单元格数组字段。

如果您现有的X是一个cellstr,我认为您可以直接调用num2cell将每个单元格推入另一层单元格间接引用。


1

在您的第一个案例中,您创建了一个具有两个字段的结构体,其值为单元数组。 单元数组用引号显示。

在您的第二个案例中,您的结构体字段具有字符数组,这正是您想要的。 字符数组不带引号显示。

您可以通过在命令提示符中键入 {'abc'} 然后 'abc' 来验证此操作。

在您的第一个案例中,您可以通过将字符串传递到单元括号之外来创建非单元数组字段值。

ds=struct('name',{'my_name_is','matlab_thining_hair'})


谢谢你,Navan。但是我实际需要的是一个带有单元格数组字段的结构体,其中基本上每个单元格数组都包含唯一的字符数组。您的建议适用于具有单个单元格数组字段值的结构体,但这不是我试图实现的目标。 - Kambiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接