Vous pouvez créer une matrice comme celle de votre question en utilisant les TRIL et ONES fonctions:
>> A = tril(ones(6))
A =
1 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
1 1 1 1 0 0
1 1 1 1 1 0
1 1 1 1 1 1
EDIT: Sur la base de votre commentaire ci-dessous, il semble que vous avez un 3-D RGB matrice d'image B
et que vous souhaitez multiplier chaque plan de couleur de B
par la matrice A
. Cela aura pour résultat net de définir la partie triangulaire supérieure de l'image (correspondant à tous les zéros dans A
) au noir. En supposant que B
est une matrice 6-en-6-en-3 (à savoir les lignes et les colonnes du B
correspondent à ceux de A
), voici une solution qui utilise l'indexation (et la fonction REPMAT) au lieu de multiplication:
>> B = randi([0 255],[6 6 3],'uint8'); % A random uint8 matrix as an example
>> B(repmat(~A,[1 1 3])) = 0; % Set upper triangular part to 0
>> B(:,:,1) % Take a peek at the first plane
ans =
8 0 0 0 0 0
143 251 0 0 0 0
225 40 123 0 0 0
171 219 30 74 0 0
48 165 150 157 149 0
94 96 57 67 27 5
L'appel à REPMAT réplique une version niée de A
3 fois de sorte qu'elle ait les mêmes dimensions que B
. Le résultat est utilisé comme logical index dans B
, définissant les index non-zéro à 0. En utilisant l'indexation au lieu de la multiplication, vous pouvez éviter d'avoir à vous soucier de la conversion A
et B
au même type de données (qui serait nécessaire pour faire le multiplication dans ce cas puisque A
est de type double
et B
est de type uint8
).
La fonction de matrice triangulaire inférieure surclasse les solutions homerollées. –
Oui, c'est vrai. +1 –
Merci c'était bon. mon problème ici est que je veux multiplier cette matrice avec la matrice contiennent image ::> et la matrice contiennent l'image composée de 3 paramètre (W, H, RGB) plz l'essayer et voir le problème, alors aidez-moi .. merci –