gpt4 book ai didi

matlab - 如何在元胞数组matlab中找到一行的子项?

转载 作者:行者123 更新时间:2023-12-02 03:33:17 24 4
gpt4 key购买 nike

我有如下的元胞数组:

S{1} = [10,20,30,40,50];
S{2} = [10,20,40,50];
S{3} = [10,50,510];
S{4} = [10,20,70,40,60];
S{5} = [20,40];

并且,我需要找到属于以下子项的单元格行:

[10,20,30,40,50,60]

对于上面的例子结果是:

1,2,5 

因为第 1 行和第 2 行以及第 5 行只有 [10,20,30,40,50,60] 的子项。

在我的工作中,元胞数组很大。我需要一个快速代码。

最佳答案

S{1} = [10,20,30,40,50];
S{2} = [10,20,40,50];
S{3} = [10,50,510];
S{4} = [10,20,70,40,60];
S{5} = [20,40]; % data
t = [10,20,30,40,50,60]; % target values

然后,您可以申请ismemberall通过 cellfun 到每个单元格的内容.结果是一个逻辑向量,您可以使用 find 从中获得所需的索引:

result = find(cellfun(@(x) all(ismember(x, t)), S));

另一种方法(我不知道在你的情况下哪个更快)是通过计算所有与 bsxfun 的成对比较来替换 ismember然后申请any :

result = find(cellfun(@(x) all(any(bsxfun(@eq, t(:), x(:).'), 1)), S));

关于matlab - 如何在元胞数组matlab中找到一行的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408921/

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