Translate a matrix with nested loops?

1 Ansicht (letzte 30 Tage)
Colin Starker
Colin Starker am 18 Mär. 2017
Beantwortet: dpb am 18 Mär. 2017
I need to translate a matrix up and to the right with nested loops.
The code should be able to take any matrix A...
A=
[1 2 3 4 5;
6 7 8 9 10;
11 12 13 14 15;
16 17 18 19 20]
...and translate it by user inputs X and Y (2 and 2, in this example) to produce matrix B...
B=
[0 0 11 12 13;
0 0 16 17 18;
0 0 0 0 0;
0 0 0 0 0]

Akzeptierte Antwort

Roger Stafford
Roger Stafford am 18 Mär. 2017
No need for loops:
up = 2; right = 2;
B = zeros(size(A));
B(1:end-up,1+right:end) = A(1+up:end,1:end-right);

Weitere Antworten (1)

dpb
dpb am 18 Mär. 2017
Alternate
B=circshift(A,[up right]);
B(:,1:right)=0; B(end-up+1:end,:)=0;
I've always thought there should be a companion to cirshift that shifts in a constant or by default zero...think I've made the enhancement request a time or two, even.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by