【问题标题】:Find the data set which fulfill certain conditions找到满足特定条件的数据集
【发布时间】:2013-03-05 03:04:00
【问题描述】:

我有如下数据:

    for a=1:2
    for b=1:2
        for c=1:2
            for d=1:2
                 m{a,b}{c,d}=zeros(3,3);
            end
        end
    end
end

m{1,1}{1,1}=[6 1 4;3 7 2;1 5 6]; %pass
m{1,1}{1,2}=[3 5 4;9 2 7;5 5 6];
m{1,1}{2,1}=[5 2 3;5 9 5;2 2 3];
m{1,1}{2,2}=[2 1 0;3 5 6;8 8 8];

m{1,2}{1,1}=[2 1 3;5 6 7;3 5 5];
m{1,2}{1,2}=[6 2 4;7 7 9;3 5 8];%pass
m{1,2}{2,1}=[1 2 2;4 5 5;2 6 7];
m{1,2}{2,2}=[3 3 1;2 4 5;6 7 5];

m{2,1}{1,1}=[2 5 0;3 7 6;8 6 8];
m{2,1}{1,2}=[3 6 4;3 2 7;5 8 6];
m{2,1}{2,1}=[3 9 1;2 1 5;6 2 8];
m{2,1}{2,2}=[9 1 4;9 7 7;5 2 8];%pass

m{2,2}{1,1}=[0 5 0;3 2 6;8 6 9];
m{2,2}{1,2}=[1 2 7;5 2 5;4 2 6];
m{2,2}{2,1}=[2 1 3;2 4 6;6 9 5];
m{2,2}{2,2}=[3 7 1;1 4 5;6 9 3];

我想取每组数据的对角线,看看这些数字是否都大于5。

例如,m{1,1}{1,1} 的对角线分别为 6,7 和 6,大于 5,因此它满足条件。

此外,我需要知道通过条件的数据集的位置。在这个例子中,数据集 m{1,1}{1,1} ,m{1,2}{1,2} 和m{2,1}{2,2} 是通过。

【问题讨论】:

    标签: matlab for-loop cell diagonal


    【解决方案1】:
    t=cellfun(@(mii) cellfun(@(mjj) all(diag(mjj)>5),mii),m,'uni',false);
    
    t = 
        [2x2 logical]    [2x2 logical]
        [2x2 logical]    [2x2 logical]
    
    t{1,1} =
         1     0
         0     0
    

    所以m{1,1}{1,1} 为真,m{1,1}{1,2} 为假,等等

    【讨论】:

    • 我不敢相信这么多年来我可以写 'uni' 而不是 'uniformoutput'。谢谢!
    【解决方案2】:
       a=cellfun(@(x) cellfun(@(y) all(diag(y)>5),x),m,'uniformoutput',false)
    

    你可以在里面找到答案:)

    【讨论】:

    • x 和 y 代表什么??谢谢解释~
    • Tony YEe:你有单元格数组中的单元格,co 外部单元格 fun 在 m 个单元格上运行(这是 x)。在每个单元格中,您需要处理内部单元格 - 这是内部 cellfun,它在 y 上运行。
    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多