将函数的单元格数组应用于值

时间:2015-10-15 09:13:21

标签: matlab

我定义了一个包含值和函数的单元格数组:

>> A = {1, 2, 3; @(x) x+5, @(x) x+10, 5}

A = 

    [    1]    [     2]    [3]
    @(x)x+5    @(x)x+10    [5]

有谁知道如何将此单元格数组应用于某个值?例如,当x = 2时,应用程序返回另一个单元格数组:

    [ 1]    [     2]    [3]
    [ 7]    [    12]    [5] 

2 个答案:

答案 0 :(得分:4)

将常量定义为函数:

A = {@(x)1, @(x)2, @(x)3; @(x) x+5, @(x) x+10, @(x)5}

现在使用cellfun

k = 2;
cellfun(@(x)x(k),A)

另请注意,如果您想同时应用多个k值(例如k = 1:5),则需要在此A @(x) n中编辑常量函数类似于@(x) n*ones(size(x)),然后将cellfun调用更改为:

cellfun(@(x)x(k),A, 'uni',0)

回答你的意见中的问题:

  

是否可以引用单元格数组中函数中的其他单元格?   例如,我们可以定义类似A = {@(x)1, @(x)2, the 1st cell + the 2nd cell, @(x)4}的内容吗?

您可以按如下方式定义A

A = {@(x)1, @(x)2, @(x)(A{1}(x)+A{2}(x)), @(x)4}

答案 1 :(得分:3)

定义像这样的单元格数组/函数不是更好:

A = @(x) {1, 2, 3; x+5, x+10, 5};

然后你可以通过简单的方式来应用它

A(2)

也许你甚至可以在这里使用普通矩阵而不是单元格数组:

A = @(x) [1, 2, 3; x+5, x+10, 5];