En supposant que vous ayez une matrice 3D "carrée" (c'est-à-dire NxNxN comme dans votre message original 3x3x3), vous pouvez également utiliser le remodelage et la reproduction :
Edit : puisque repmat est trop lent, je l'ai remplacé par une implémentation bsxfun.
[a,b,c] = size(C)
D = reshape(tril(ones(a)),[a,1,a]);
F = ones(1,size(E,1));
D = bsxfun(@times,D,F);
C(~D)=0;
J'ai également procédé à une comparaison rapide des trois solutions proposées. La solution de @LuisMendo ne fonctionne pas pour moi, il y a une erreur de dimension de la matrice dans la comparaison >= (les tailles [1 N] et [N 1] sont comparées).
Entre ma solution et celle de @Suever, la sienne est nettement plus rapide :
Comparing the three methods with variable size Cs:
Suever's version (for loop):
Took 0.3529s to compute.
Took 0.0002s to compute size 3x3x3.
Took 0.0008s to compute size 10x10x10.
Took 0.0008s to compute size 50x50x50.
Took 0.0455s to compute size 250x250x250.
Took 0.3055s to compute size 500x500x500.
My version (reshape/repmat):
Took 0.9086s to compute.
Took 0.0522s to compute size 3x3x3.
Took 0.0042s to compute size 10x10x10.
Took 0.0017s to compute size 50x50x50.
Took 0.1060s to compute size 250x250x250.
Took 0.7445s to compute size 500x500x500.