【问题标题】:Assign different values to cell arrays in MATLAB at once一次为 MATLAB 中的元胞数组分配不同的值
【发布时间】:2016-09-08 15:19:22
【问题描述】:

我需要有关在 MATLAB 中创建单元格数组的帮助,其中每个单元格都是不同大小的数组。例如,假设我有这个简单的数组和值:

A = [5 3 8 7 0 4 1];
B = 10;

元胞数组C 必须这样创建:

C = 
[10 20 30 40 50]
[10 20 30]
[10 20 30 40 50 60 70 80]
[10 20 30 40 50 60 70]
[Empty matrix 1x0]
[10 20 30 40]
[10]

是否可以仅在一次操作中做到这一点?我试过了:

C = cellfun(@(a,b)b*ones(1,a), A,B)

但它不起作用。

【问题讨论】:

    标签: arrays matlab cell-array


    【解决方案1】:

    cellfun 需要一个 元胞数组 作为函数的输入。您有一个数字数组,因此请改用arrayfun。您也没有为数组中的每个元素输出一个标量,因此您需要将 UniformOutput 标志设置为 0。最后,使用 colon 运算符来执行您需要的操作,而不是矩阵乘法。不幸的是,输出将是单元格的行向量,因此如果您绝对需要列向量,例如您在帖子中显示的内容,请转置输出:

    A = [5 3 8 7 0 4 1];
    B = 10;
    C = arrayfun(@(x) B*(1:x), A, 'UniformOutput', 0).';
    

    请注意,声明为arrayfun 的第一个输入的匿名函数具有词法范围,这意味着在匿名函数声明之前工作区中可见的任何变量都是可见的。您可以在函数中访问该变量,而不必手动将其作为单独的输入输入arrayfun

    我们现在得到:

    >> format compact
    >> celldisp(C)
    C{1} =
        10    20    30    40    50
    C{2} =
        10    20    30
    C{3} =
        10    20    30    40    50    60    70    80
    C{4} =
        10    20    30    40    50    60    70
    C{5} =
         []
    C{6} =
        10    20    30    40
    C{7} =
        10
    

    【讨论】:

    • 嗨,我忘了说我也试过了……上面写着Undefined function 'colon' for input arguments of type 'cell'. Error in @(x)B*(1:x)
    • @PhoenixBlue cellfun 需要一个元胞数组。请完整阅读我的帖子。你会注意到我没有使用cellfun
    • 哦!对不起这是我的错!有效!我只是放了单元格数组而不是简单的数组(即使在我第一次尝试中......)!!再次感谢!!
    • @PhoenixBlue 啊,我明白了。所以元素在一个单元格数组中,比如A = {5, 3 , 8, 7, 0, 4, 1};?在这种情况下,使用cellfun 应该可以。您指定了一个数字数组,这就是需要 arrayfun 的原因。很高兴我能帮上忙。
    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多