使用基于索引 oneliner 的值初始化二维数组

initialize 2-D array with values based on index oneliner

在 python 中可以像 [a+b for a in range(n) for b in range(n)] 那样进行列表推导。有没有办法在 MATLAB 中做到这一点?如果它是一维数组,我可以说 arrayfun(@(a)a,1:n),但我找不到一种简洁的适应性方式。

可能不是那么简洁的方式:

for ii=1:n
    a(ii,:) = ii:n+ii-1;
end

bsxfun确实可以胜任:

n = 5 ;
a = bsxfun( @(x,y) x+y-1 , (1:n), (1:n).')

a =
     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7
     4     5     6     7     8
     5     6     7     8     9

正如 Luis Mendo 正确地提醒我们的那样,bsxfun 使用内置函数会更快(列表在文档中),所以如果您可以使用简单的内置函数你应该这样做:

a = bsxfun( @plus , (1:n), (0:n-1).')

如果你的函数太复杂,那么就像上面的例子一样明确定义它。

另一种方法是使用 hankel:

>> n = 5;
>> hankel(1:n, n:2*n-1)

ans =

     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7
     4     5     6     7     8
     5     6     7     8     9