【问题标题】:Array inside array in MATLABMATLAB中的数组内的数组
【发布时间】:2015-10-24 06:24:42
【问题描述】:

n=4为例,如何在MATLAB中创建这样的数组?

[[0] [0 0] [0 0 0] [0 0 0 0]]

例如,有没有办法在for 循环内创建一个数组? 这就是我想要实现的(我知道这是错误的代码):

for i=1:n
   table(i)=zeros(i);
end

【问题讨论】:

    标签: arrays matlab jagged-arrays


    【解决方案1】:

    你需要一个cell array 来保存你的数字向量。当每个单元格的内容具有不同的大小或类型时,Matlab 中使用单元格数组。

    其他 cmets:

    • 我将您的变量 i 重命名为 k,以避免影响虚数单位。
    • 我还将您的变量 table 重命名为 t,以避免影响 table 函数。
    • zeros(k) 给出了一个由零组成的 kxk 矩阵。要获得零的行向量,请使用zeros(1,k)
    • 最好预先分配元胞数组以提高速度。

    综合以上,代码为:

    n = 4;
    t = cell(1,n); %// preallocate: 1xn cell array of empty cells
    for k = 1:n
       t{k} = zeros(1,k);
    end
    

    这给出了:

    >> celldisp(t)
    t{1} =
         0
    t{2} =
         0     0
    t{3} =
         0     0     0
    t{4} =
         0     0     0     0
    

    同样,您可以将for 循环替换为更紧凑的arrayfun

    result = arrayfun(@(k) zeros(1,k), 1:n, 'uniformoutput', false);
    

    【讨论】:

    • arrayfun 会给出一个很好的单行答案。 :)
    • @RafaelMonteiro 好主意!我已经添加了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多