Je voudrais générer une matrice N-by-N-by-3 A
tel que A(:,:,i) = eye(n)*i
. Comment puis-je faire cela sans utiliser de boucles (c'est-à-dire de manière vectorisée)?Comment puis-je générer cette matrice 3D sans boucles pour MATLAB?
3
A
Répondre
0
Si vous avez une ancienne version de Matlab avant BSXFUN a été introduit, envisager cette option (la même réponse que celle par @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
1
Une autre option consiste à utiliser BSXFUN, la multiplication de la matrice d'identité avec un 1-en-1-en-3 matrice de 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
bsxfun n'est pas dans matlab7.3.0 (r2006b), correct? –
@Quiang Li: On dirait qu'il est apparu en premier dans r2007a. – Jonas