2010-12-08 5 views

Antwort

0

Wenn Sie eine ältere Version von MATLAB haben, bevor BSXFUN eingeführt wurde, sollten Sie diese Option (die gleiche Antwort wie die von @Jonas):

N = 4; M = 3; 
A = repmat(eye(N),[1 1 M]) .* repmat(permute(1:M,[3 1 2]),[N N 1]) 

A(:,:,1) = 
    1  0  0  0 
    0  1  0  0 
    0  0  1  0 
    0  0  0  1 
A(:,:,2) = 
    2  0  0  0 
    0  2  0  0 
    0  0  2  0 
    0  0  0  2 
A(:,:,3) = 
    3  0  0  0 
    0  3  0  0 
    0  0  3  0 
    0  0  0  3 
1

Eine Möglichkeit, dies zu tun ist, um die Funktionen verwenden KRON und RESHAPE:

>> N = 4; 
>> A = reshape(kron(1:3,eye(N)),[N N 3]) 

A(:,:,1) = 

    1  0  0  0 
    0  1  0  0 
    0  0  1  0 
    0  0  0  1 

A(:,:,2) = 

    2  0  0  0 
    0  2  0  0 
    0  0  2  0 
    0  0  0  2 

A(:,:,3) = 

    3  0  0  0 
    0  3  0  0 
    0  0  3  0 
    0  0  0  3 
1

Eine weitere Option ist BSXFUN zu verwenden, die Identitätsmatrix mit einem Array 1-für-1-by-3 Multiplizieren von 1,2,3

>> bsxfun(@times,eye(4),permute(1:3,[3,1,2])) 
ans(:,:,1) = 
    1  0  0  0 
    0  1  0  0 
    0  0  1  0 
    0  0  0  1 
ans(:,:,2) = 
    2  0  0  0 
    0  2  0  0 
    0  0  2  0 
    0  0  0  2 
ans(:,:,3) = 
    3  0  0  0 
    0  3  0  0 
    0  0  3  0 
    0  0  0  3 
+0

bsxfun ist nicht in Matlab7.3.0 (r2006b), richtig? –

+0

@Quiang Li: Sieht so aus, als ob es zuerst in r2007a erschien. – Jonas

Verwandte Themen