MATLAB中的数组内部数组

NoM*_*Man 3 arrays matlab jagged-arrays

如果n=4例如,如何创建在MATLAB这样一个数组?

[[0] [0 0] [0 0 0] [0 0 0 0]]
Run Code Online (Sandbox Code Playgroud)

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

for i=1:n
   table(i)=zeros(i);
end
Run Code Online (Sandbox Code Playgroud)

Lui*_*ndo 6

您需要一个单元格数组来保存数字向量.当每个细胞的内容具有不同的大小或类型时,在Matlab中使用细胞阵列.

附加评论:

  • 我将你的变量重命名ik,以避免影响虚构单位.
  • 我也将你的变量重命名tablet,以避免影响该table函数.
  • zeros(k)给出一个零的kx k矩阵.要获得零矢量的行向量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
Run Code Online (Sandbox Code Playgroud)

这给出了:

>> celldisp(t)
t{1} =
     0
t{2} =
     0     0
t{3} =
     0     0     0
t{4} =
     0     0     0     0
Run Code Online (Sandbox Code Playgroud)

等效地,您可以用for更紧凑的方式替换循环arrayfun:

result = arrayfun(@(k) zeros(1,k), 1:n, 'uniformoutput', false);
Run Code Online (Sandbox Code Playgroud)

  • arrayfun会给出一个很好的一行答案.:) (2认同)