Combining matrices of different sizes at a certain location

1 view (last 30 days)
Hello All,
I am having a problem trying to figure out how to combine two matrices of different sizes. I have one matrix that is all zeros and one smaller matrix with random values that I want to input starting at a certain "coordinate". The coordinate will not be the same every and the row and column will both be based off of two variables.
For example, if I have a 20 x 10 matrix of all zeros and I want to superimpose and replace the zeros with a random 5 x 5 matrix starting at [3,3].
The output would look like:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 3 3 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 3 4 2 5 9 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 3 2 6 2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 6 8 3 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 8 4 3 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
If anyone has an idea on how to fix this I would be greatly appreciative.

Answers (2)

Star Strider
Star Strider on 30 Jul 2014
Edited: Star Strider on 30 Jul 2014
This works:
A = zeros(20,10);
B = randi(9,5,5);
A(3:7,3:7) = B
  1 Comment
Star Strider
Star Strider on 30 Jul 2014
OK.
Here’s a more robust version (tested successfully):
A = zeros(20,10);
B = randi(9,5,5);
Sr = 3; % Beginning row to insert B
Sc = 3; % Beginning col to insert B
[Ar, Ac] = size(A);
[Br, Bc] = size(B);
Lr = Ar - (Sr + Br - 1); % Check dimension limits
Lc = Ac - (Sc + Bc - 1);
if (Lr < 0) | (Lc < 0)
fprintf(2, 'WARNING! B will not fit in A with current sizes and start indices.\n\n')
break
else
A(Sr:Sr+Br-1, Sc:Sc+Bc-1) = B;
end

Sign in to comment.


Bryce
Bryce on 30 Jul 2014
Your answers will definitely work with how I described what I am trying to do, but I failed at being specific enough. I have a matrix already made that has not "random" values in it per say, but the values are arbitrary for the problem I am having. I also will not always start at [3, 3] and there is not defined number of columns and rows for the smaller matrix. So in Star Strider's answer, the last line would be using the variables fRow and fCol and would change to "A(fRow:fRow+#ofRows, fCol:fCol+#ofColumns) = B"
However, I am not sure how to input the size of the smaller matrix as a variable and I am not sure if it will work with the addition of the start of the smaller matrix plus the dimension of that matrix.
Thanks for the very quick response everyone.

Categories

Find more on Creating and Concatenating 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!