如何在具有多个嵌套字段的数据结构中使用 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
,这对于数据来说是不正确的。
感谢大家的参与!
在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
,这对于数据来说是不正确的。
感谢大家的参与!