Replace diagonals in a matrix

12 vues (au cours des 30 derniers jours)
Hasan Hassoun
Hasan Hassoun le 19 Jan 2021
Commenté : Image Analyst le 23 Jan 2021
Hello every one,
How to replace the upper and lower part of a n*n matrix with zeros (The upper part starts from "diagonal+2" until n while the lower part starts from "diagonal-2" until n)?
  1 commentaire
Image Analyst
Image Analyst le 23 Jan 2021
Original question is below in case he deletes it like he's done before:
Replace diagonals in a matrix
Hello every one,
How to replace the upper and lower part of a n*n matrix with zeros (The upper part starts from "diagonal+2" until n while the lower part starts from "diagonal-2" until n)?

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 19 Jan 2021
For example,
A=rand(10),
A = 10×10
0.3632 0.5683 0.2698 0.2133 0.4828 0.8948 0.0478 0.7711 0.5088 0.7301 0.8024 0.1100 0.1475 0.6313 0.8957 0.8629 0.1435 0.8356 0.1381 0.8203 0.8949 0.0767 0.3939 0.2073 0.3055 0.5721 0.7656 0.1443 0.3270 0.6013 0.5722 0.1502 0.8491 0.7124 0.9746 0.7291 0.9774 0.9558 0.4083 0.0934 0.1948 0.7491 0.7331 0.3686 0.4528 0.2436 0.2373 0.4254 0.9163 0.6997 0.4224 0.4079 0.6316 0.8894 0.8130 0.2013 0.0054 0.5217 0.1405 0.7939 0.0219 0.5942 0.3860 0.2447 0.6384 0.9649 0.3000 0.2048 0.2233 0.1450 0.4361 0.2666 0.2646 0.3323 0.6236 0.6866 0.9302 0.3413 0.4398 0.0531 0.3450 0.6491 0.0609 0.1894 0.8414 0.7489 0.1080 0.4159 0.2769 0.3304 0.0411 0.9652 0.9593 0.3298 0.9979 0.3895 0.2349 0.0686 0.9871 0.3078
mask=tril( triu( true(size(A)), -2 ), +2);
B=A.*mask
B = 10×10
0.3632 0.5683 0.2698 0 0 0 0 0 0 0 0.8024 0.1100 0.1475 0.6313 0 0 0 0 0 0 0.8949 0.0767 0.3939 0.2073 0.3055 0 0 0 0 0 0 0.1502 0.8491 0.7124 0.9746 0.7291 0 0 0 0 0 0 0.7331 0.3686 0.4528 0.2436 0.2373 0 0 0 0 0 0 0.8894 0.8130 0.2013 0.0054 0.5217 0 0 0 0 0 0 0.6384 0.9649 0.3000 0.2048 0.2233 0 0 0 0 0 0 0.6866 0.9302 0.3413 0.4398 0.0531 0 0 0 0 0 0 0.1080 0.4159 0.2769 0.3304 0 0 0 0 0 0 0 0.0686 0.9871 0.3078
  1 commentaire
Hasan Hassoun
Hasan Hassoun le 19 Jan 2021
Thank you!

Connectez-vous pour commenter.

Plus de réponses (1)

David Goodmanson
David Goodmanson le 19 Jan 2021
Modifié(e) : David Goodmanson le 19 Jan 2021
Hi Hasan,
here is one way
r = rand(7,7)
n = size(r,1);
m = (n-1)/2;
a = (-m:m)-(-m:m)';
r(abs(a)>1)=0
assuming the main diagonal is number 0, and the zeros start on the +-2nd diagonal, otherwise adjust the '1' on the last line of code accordingly
  1 commentaire
Hasan Hassoun
Hasan Hassoun le 19 Jan 2021
Thank you!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by