2015-12-29 58 views

回答

5

下面是使用邏輯索引的方式:

n = 4; 
A = nan(n); 
A(~eye(n)) = 1:n^2-n; %// Only replace values *not* on diagonal 
A = A.' 

A = 

    NaN  1  2  3 
    4 NaN  5  6 
    7  8 NaN  9 
    10 11 12 NaN 
+0

簡單的方法。 +1。 – rayryeng

3

下面是使用triutril單程:

n = 4; 
A = reshape(1:n*(n-1),n-1,n).'; 
z = zeros(n,1); 
A = [tril(A,-1) z]+[z triu(A)]+diag(NaN(n,1)); 

,在這種情況下,對於4×4矩陣返回

A = 

    NaN  1  2  3 
    4 NaN  5  6 
    7  8 NaN  9 
    10 11 12 NaN 

這裏只是用reshape另一種方式:

n = 4; 
A = [reshape(1:n*(n-1),n,n-1);NaN(1,n-1)]; 
A = reshape([NaN;A(:)],n,n).' 
2

可以從nan矩陣開始,找到對角線的線性指標,然後填滿其餘元件和遞增範圍:

n=4; 
A=nan(n); 
inds=setdiff(1:n^2,sub2ind([n,n],1:n,1:n)); 
A(inds)=1:numel(inds); 
A=A.'; %' transpose to get the matrix we need 

到底轉置是必要的,因爲線性索引去列第一,但你的具體需要矩陣EL的行的第一項任務對此語句。

結果:

>> A 
A = 
    NaN  1  2  3 
    4 NaN  5  6 
    7  8 NaN  9 
    10 11 12 NaN 
3

這裏的另一種方式:做

n = 4; %// matrix size 
x = 1-eye(n); 
x(:) = cumsum(x(:)); 
x = x.' + diag(NaN(1,n));