2016-09-08 36 views
2

我需要帮助在MATLAB中创建一个单元格数组,其中每个单元格都是不同大小的数组。举例来说,假设我有这个简单的数组和值:一次性在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) 

但它没有工作。

回答

3

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 
+0

您好我忘了说,我想,太...它说类型“细胞”的输入参数'未定义功能“冒号”。 @(x)B *(1:x)的错误' – PhoenixBlue

+0

@PhoenixBlue'cellfun'需要一个**单元阵列**。请详细阅读我的帖子。你会注意到**我没有使用'cellfun' **。 – rayryeng

+0

OH!对不起这是我的错!有效!我只是把单元格数组,而不是简单的数组(甚至在我的第一次尝试...)!再次感谢!! – PhoenixBlue