Filter löschen
Filter löschen

how can i make the centre elements of a matrix to become zeros

6 Ansichten (letzte 30 Tage)
Weisz Thomas
Weisz Thomas am 9 Dez. 2018
Bearbeitet: Jan am 11 Dez. 2018
I am writting a function that takes an n-by-m matrix and and an odd interger k as input arguments. both n and m are odd numbers as well and are all bigger than k. the function should return the input argument with its center k-by-k matrix zeroed out. this is how my function looks like currently and it is not producing the correct output. please help.
function A= cancel_middle(A,k)
for ii=1:k
for jj=1:k
A(end/2+1/2:end/2+1/2)=0;
end
end
end

Akzeptierte Antwort

Jan
Jan am 9 Dez. 2018
Bearbeitet: Jan am 11 Dez. 2018
The body of the loop does not use the indices ii and jj at all, so the code does not depend on k in any way.
Call size at first to determine the dimension of A. Then find out, which indices will be affected, if you need k rows and columns at the center. You do not need loops to assign the zeros, but the approach A(c1:c2, r1:r2) = 0 is sufficient.

Weitere Antworten (2)

Elijah Smith
Elijah Smith am 9 Dez. 2018
Bearbeitet: Elijah Smith am 9 Dez. 2018
this is what I came up with:
function A = cancel_middle(A, k)
[n, m] = size(A);
array2add = zeros(k);
if n > k && m > k
A((floor(n/2) - floor(k/2) + 1):(floor(n/2) - floor(k/2) + k), (floor(m/2) - floor(k/2) + 1):(floor(m/2) - floor(k/2) + k)) = array2add;
end
end
it just replace the middle k-by-k matrix with zeros and if the rows/cols are add it defaults to the top left.

Image Analyst
Image Analyst am 9 Dez. 2018
Bearbeitet: Image Analyst am 9 Dez. 2018
Try getting rid of the for loops and just finding the middle element and setting it to zero
middleLinearIndex = ceil(numel(A) / 2);
A(middleLinearIndex) = 0;

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2013a

Community Treasure Hunt

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

Start Hunting!

Translated by