在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);*
我不确定为什么它不起作用。有人知道如何解决这个问题吗? 感谢。
答案 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
,但数据不是这样。
感谢大家的投入!