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

标签 arrays matlab cell-array

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

相关文章:

C 编程数组和指针

c++ - 在 Ubuntu 上从 C++ 调用 Matlab

arrays - MATLAB:如何拆分不同分隔符数字的元胞数组?

matlab - 计算充满向量的单元格中的唯一行

matlab - 如何用 NaN 替换元胞数组中的所有 Inf 值?

python - 如何将空格分隔的数据读入 numpy 数组?

javascript - JavaScript 中的数组求和

javascript - js 的 linq : how to get cartesian product of multiple arrays

arrays - 在Matlab中从结构数组获取数组而不使用循环

matlab - 未找到保存图