在python中,它可以像arrayfun(@(a)a,1:n)
那样进行列表理解。有没有办法在MATLAB中做到这一点?如果它是一维数组,我可以说for ii=1:n
a(ii,:) = ii:n+ii-1;
end
,但我找不到简洁的适应方式。
可能不那么简洁:
{{1}}
答案 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).')
如果你的函数过于复杂,那么只需在顶部示例中明确定义它。