我需要有关在 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 http://www.mathworks.com/help/matlab/ref/arrayfun.html反而。您也没有输出数组中每个元素的标量,因此您需要设置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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)