Combining matrices of different sizes at a certain location
8 次查看(过去 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.
1 个评论
回答(2 个)
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
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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!