一次为 MATLAB 中的元胞数组分配不同的值

Assign different values to cell arrays in MATLAB at once

我需要有关在 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)

但是没有用。

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

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