使用基于索引oneliner的值初始化2-D数组

时间:2015-07-06 17:38:20

标签: matlab list-comprehension

在python中,它可以像arrayfun(@(a)a,1:n)那样进行列表理解。有没有办法在MATLAB中做到这一点?如果它是一维数组,我可以说for ii=1:n a(ii,:) = ii:n+ii-1; end ,但我找不到简洁的适应方式。

可能不那么简洁:

{{1}}

2 个答案:

答案 0 :(得分:4)

另一种方法是使用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

答案 1 :(得分:3)

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).')

如果你的函数过于复杂,那么只需在顶部示例中明确定义它。