我需要有关在 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。最后,使用冒号运算符来执行您需要的操作,而不是使用矩阵乘法。不幸的是,输出将是单元格的行向量,因此如果您绝对需要列向量(例如您在帖子中显示的内容),请转置输出:
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
关于arrays - 在 MATLAB 中一次为元胞数组分配不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39394731/