2010-12-08 10 views

答えて

0

あなたはBSXFUN前にMATLABの古いバージョンを導入している場合は、このオプション(@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

一つの方法は、関数を使用することですKRONRESHAPE

>> 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

別のオプションは、1,2,3の1行1行3列の配列と単位行列を乗じ、BSXFUNを使用することです

>> 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はmatlab7.3.0(r2006b)には含まれていませんが、正しいですか? –

+0

@ Quiang Li:r2007aで最初に登場したようです。 – Jonas

関連する問題