gpt4 book ai didi

arrays - 检查元胞数组是否是 Matlab 中另一个元胞数组的子集

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:57 27 4
gpt4 key购买 nike

我有两个字符串元胞数组,如下所示

 A={{a,b},{c},{d,e}}
B={{a,b},{c,d},{e}}

我想检查 A 是否是 B 的子集,这意味着 A 中的每个单元格在 B 中都有一个 super 单元格。在给定的示例中,它不是因为 A 包含 {d,e} 而 B 没有任何具有这些或更多元素的单元格。我认为 ismember 在这种情况下应该有用,但我就是无法写下逻辑。

谢谢!

最佳答案

给定A和B

A={{'a','b'},{'c'},{'d','e'}}
B={{'a','b'},{'c','d'},{'e'}}

我们可以定义一个函数isSubset,如下:

isSubset = @(superSet,subSet)isempty(setdiff(subSet, superSet));

并测试它:

isSubset(B{1}, A{1})  %true
isSubset(B{2}, A{2}) %true
isSubset(B{3}, A{3}) %false

现在我们可以使用 isSubSetcellfun 来定义一个函数 isSubSetOfAny,它检查一个特定的子集是否是任何子集的子集一组集合,像这样:

isSubSetOfAny = @(superSetSet, subSet) any(cellfun(@(x)isSubset(x, subSet), superSetSet));

并测试它:

isSubSetOfAny(B, A{1})  %True
isSubSetOfAny(B, A{2}) %True
isSubSetOfAny(B, A{3}) %True

现在我们可以使用 isSubSetOfAny 加上 cellfun(再次)来定义 isEachMemberASubsetOfAny,它执行您描述的操作:

    isEachMemberASubsetOfAny = @(superSetSet, subSetSet) all(cellfun(@(x)isSubSetOfAny(superSetSet, x), subSetSet));

并测试它:

isEachMemberASubsetOfAny(B, A)    %Returns false

A_1 = {{'a','b'},{'c'},{'e'}}; %Define a variant of `A`
isEachMemberASubsetOfAny(B, A_1) %Returns false

关于arrays - 检查元胞数组是否是 Matlab 中另一个元胞数组的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16112530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com