Combining matrices of different sizes at a certain location

조회 수: 8 (최근 30일)
Bryce
Bryce 2014년 7월 30일
댓글: Star Strider 2014년 7월 30일
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.

답변 (2개)

Star Strider
Star Strider 2014년 7월 30일
편집: Star Strider 2014년 7월 30일
This works:
A = zeros(20,10);
B = randi(9,5,5);
A(3:7,3:7) = B
  댓글 수: 1
Star Strider
Star Strider 2014년 7월 30일
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

댓글을 달려면 로그인하십시오.


Bryce
Bryce 2014년 7월 30일
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.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by