【问题标题】:Applying Threshold to Matrix Within Cell Array对元胞数组内的矩阵应用阈值
【发布时间】:2018-02-07 09:12:10
【问题描述】:

我有一个称为输出的元胞数组。输出中的每个单元格都包含一个 1024 x 1024 矩阵。我想对每个矩阵设置阈值,以便将低于给定值的元素设置为 NaN。

我尝试使用:

output(output < 100000) = NaN; 

但是,我觉得这是错误的做法。直观地说,我想使用 for 循环,但是,我认为这不是最有效的方法。

想法?有什么建议吗?

谢谢:)

【问题讨论】:

    标签: arrays matlab matrix threshold


    【解决方案1】:

    可以用cellfun函数完成!cell fun可以在每个单元格上实现一个函数(就像for循环)假设下面的例子

    首先考虑您有一个名为a 的单元格形式的变量。

    a{1,1} =
     1     2
     3     4
    
    a{2,1} =
     1     2
     5     5
    
     a{1,2} =
     4     5
     1     2
    
     a{2,2} =
     5     5
     5     5
    

    在这个单元格中,如果条目低于 3,我想用 NaN 替换条目

    所以我为此写了下面的函数

    function out = main_func()
    %% define a
    a{1,1}=[1 2;3 4];
    a{1,2}=[4 5;1 2];
    a{2,1}=[1 2;5 5];
    a{2,2}=[5 5;5 5];
    
    
    out=cellfun(@(T) cell_f(T),a,'uniformOutput',false); % using cell fun function
    
    function x = cell_f(x)
    x(x<3)=nan; % if entries lower that 3 then substitute with Nan
    

    输出如下所示

    ans{1,1} =
     NaN   NaN
     3     4
    
    ans{2,1} =
     NaN   NaN
     5     5
    
    ans{1,2} =
     4     5
     NaN   NaN
    
    ans{2,2} =
     5     5
     5     5 
    

    【讨论】:

    • 感谢您的回复。但是,我在我的代码中实现它时遇到了一些麻烦......我的单元格数组的名称是输出的,输出中的每个单元格都有一个 1024 x 1024 矩阵。如果我想让每个矩阵中的每个元素都低于 1e6 = nan,我该怎么写?
    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 2014-05-12
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多