Put a small matrix in a bigger one.
Show older comments
I want to put a small matrix (p*q) called B into a bigger matrix (m*n) called A. How can I do it. Matrix B should be put on the left-right corner of matrix A.
for better understanding take a look on this image:

Accepted Answer
More Answers (2)
Image Analyst
on 2 Jun 2013
Edited: Image Analyst
on 2 Jun 2013
Try this fairly robust, more general code where you can specify the upper left corner and it will check to make sure the small array does not go outside the big array.:
% Create sample data:
big = ones(10)
small = 9 * ones(3)
% Get sizes
[rowsBig, columnsBig] = size(big);
[rowsSmall, columnsSmall] = size(small);
% Specify upper left row, column of where
% we'd like to paste the small matrix.
row1 = 5;
column1 = 3;
% Determine lower right location.
row2 = row1 + rowsSmall - 1
column2 = column1 + columnsSmall - 1
% See if it will fit.
if row2 <= rowsBig
% It will fit, so paste it.
big(row1:row2, column1:column2) = small
else
% It won't fit
warningMessage = sprintf('That will not fit.\nThe lower right coordinate would be at row %d, column %d.',...
row2, column2);
uiwait(warndlg(warningMessage));
end
3 Comments
Preet Lal
on 20 May 2022
Hello @Image Analyst
Thank You for sharing code publicly.
I have one doubt....
I am working on multiple matrices, and some of the row/column are common to each matrices like in 5X5 matrices, 2X3 is overlapping each other. How I can calculate mean for that specific overlapping row and cols and fill into bigger matrix.
Image Analyst
on 20 May 2022
If you know the size of the matrices to be pasted onto the underlying matrix, and the locations, then you can figure out the overlap region. Then just use normal indexing to get the mean. For example if you're pasting a 2x3 into the upper left corner of a 5x5 matrix, and a 2x3 onto the upper right corner, then the last column of the first matrix you paste will overlap the left column of the second 2x3 matrix, and they are both in column 3 of the 5x5 matrix.
Preet Lal
on 20 May 2022
Andrei Bobrov
on 2 Jun 2013
Edited: Andrei Bobrov
on 2 Jun 2013
Use function padarray from Image Processing Toolbox
A(padarray(true(size(B)),size(A)-size(B),'pre')) = B;
or
A(blkdiag(false(size(A)-size(B)),true(size(B)))) = B;
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!