Combining matrices of different sizes at a certain location

8 visualizzazioni (ultimi 30 giorni)
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.

Risposte (2)

Star Strider
Star Strider il 30 Lug 2014
Modificato: Star Strider il 30 Lug 2014
This works:
A = zeros(20,10);
B = randi(9,5,5);
A(3:7,3:7) = B
  1 Commento
Star Strider
Star Strider il 30 Lug 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

Accedi per commentare.


Bryce
Bryce il 30 Lug 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.

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by