how can i make the centre elements of a matrix to become zeros
7 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Jan
2018-12-9
编辑:Jan
2018-12-11
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.
0 个评论
更多回答(2 个)
Elijah Smith
2018-12-9
编辑:Elijah Smith
2018-12-9
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
2018-12-9
编辑:Image Analyst
2018-12-9
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;
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!