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

时间:2015-03-06 01:31:14

标签: arrays string matlab data-structures indices

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

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

现在我想使用ismember来确定b(1).bc中的元素是否包含在c(1).bc中,如果是,则c(1).bc中的每一个都包含元素属于。

例如:b(1).b(1).c = a,我想将其追溯到结构c以查找结构c'a'所属的索引(它应该返回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);*

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

2 个答案:

答案 0 :(得分:0)

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

[~, 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

答案 1 :(得分:0)

我找到了以下工作。

首先将b(1).b.c分配给数组S,然后使用c将其与数据结构ismember进行比较。

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,但数据不是这样。

感谢大家的投入!