如何在具有多个嵌套字段的数据结构中使用 matlab ismember?

How do I use matlab ismember in data structures with multiple nested fields?

在matlab中我定义了如下2个数据结构b和c。

b(1).b = struct('c',{'a', 'b', 'c'})
c(1).b = struct('c',{'b', 'a', 'c'})

现在我想用ismember找出b(1).b.c的元素是否包含在c(1).b.c中,如果是,哪个c(1).b.c 每个元素所属的索引。

例如:b(1).b(1).c = a,我想回溯到结构c,找到结构c'a'属于哪个索引(应该return 2 因为 'a' 是结构 c 的第二个元素)。

我试过了

[~, ind] = ismember({b(1).b.c},{c(1).b.c})

以前使用不同的数据结构为我工作,但我现在收到以下错误:

*Error using cell/ismember>cellismemberR2012a (line 192)
Input A of class cell and input B of class cell must be cell arrays of      strings, unless one is a string.
Error in cell/ismember (line 56)
[varargout{1:max(1,nargout)}] = cellismemberR2012a(A,B);*

我不确定为什么它不起作用。有人知道如何解决这个问题吗? 谢谢。

谷歌搜索没有显示任何可能的解决方案,但有几个选项:

[~, ind] = ismember([{b(1).b.c}],[{c(1).b.c}])

并转换为元胞数组:

[~,idx]=ismember(struct2cell(b(1).b),struct2cell(c(1).b))
idx=reshape(idx,1,3);

对于两个输出应该是:

2 1 3

我发现以下方法有效。

首先将 b(1).b.c 分配给数组 S,然后使用 ismember.

将其与数据结构 c 进行比较
S = [b(1).b.c]
S = S'
[~, ind] = ismember(S,{c(1).b.c})

我发现这个很管用。

此外,

[~, ind] = ismember([b(1).b.c}],[c(1).b.c]) 

不会给出错误,但 ind 中的所有值都是 zero,这对于数据来说是不正确的。

感谢大家的参与!