2017-04-23 50 views

回答

3

您可以利用singleton expansion,使用bsxfun

A = bsxfun(@power, (1:n).', (1:m)); 

在最近的Matlab的版本(R2016b起),由于隐性单扩展,你可以跳过bsxfun和直接写

A = (1:n).'.^(1:m); 

或者,对于更易读易用的初学者版本,您可以使用明确制作两个相同大小的矩阵10,然后应用.^element-wise power):

[ii, jj] = ndgrid(1:n, 1:m); 
A = ii.^jj; 

另一种方法是使用cumprod通过反复乘更换电源:

A = cumprod(repmat((1:n).', 1, m), 2); 
+1

非常感谢! –

+0

你知道如何实施: ** A_ {i,j} = 1,如果i = j + 1或i = j-1(0,否则)** 我可以用'bsxfun @eq'? –

+0

你可以用'bsxfun(@minus,...)'来实现,我想你想要的是'abs(bsxfun(@minus,(1:n)。',(1:m)) )== 1',检查'diag'函数 –