Clear Filters
Clear Filters

Replacing Values of a Larger Matrix with that of a Smaller Matrix

1 view (last 30 days)
I have a matrix A that looks like:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
and a matrix B that looks like:
0 0
0 0
0 0
0 0
0 0
0 0
How can I create a new matrix C that looks like:
0 0 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 0 0
by inserting B into A and without using loops. Also if this is not possible, is there a way to create matrix C from matrix A?

Accepted Answer

Cedric
Cedric on 10 Sep 2017
Edited: Cedric on 10 Sep 2017
b = mod( floor( (0:size( A, 2 )-1)/2 ), 2 ) ;
C = bsxfun( @times, A, b ) ;
Note that the way I define b=00110011.. is ... shows that I am tired!
  2 Comments
Cedric
Cedric on 10 Sep 2017
My pleasure. I answered thinking that you wanted to "mask" columns of A, hence the multiplication by 0 and 1 of given columns. Let me know if the purpose was different.

Sign in to comment.

More Answers (1)

Jose Marques
Jose Marques on 10 Sep 2017
imgSiz = [x1,y1];
blkSiz = [x1,size_column];
numRep = imgSiz./blkSiz;
basMat = toeplitz(mod(0:numRep(1)-1,2),mod(0:numRep(2)-1,2));
mask(:,:) = repelem(basMat,x1,size_column);

Community Treasure Hunt

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

Start Hunting!