Shift and duplicate values in a data set

1 Ansicht (letzte 30 Tage)
Daniel
Daniel am 9 Jul. 2023
Kommentiert: Daniel am 9 Jul. 2023
I have a data set of M=magic(4)
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
How can I have it so that you duplicate the data multiple times but also shift the whole thing one row to the right each time so that it would look like:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
0 16 2 3
0 5 11 10
0 9 7 6
0 4 14 15
0 0 16 2
0 0 5 11
0 0 9 7
0 0 4 14

Akzeptierte Antwort

Paul
Paul am 9 Jul. 2023
Couple of options
M = magic(4);
Z = zeros(12,4);
for ii = 1:3
Z(4*(ii-1)+1:4*(ii-1)+4,:) = [zeros(4,ii-1) M(:,1:end-ii+1)];
end
Z
Z = 12×4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 0 16 2 3 0 5 11 10 0 9 7 6 0 4 14 15 0 0 16 2 0 0 5 11
C{1} = M;
for ii = 2:3
C{ii} = [zeros(4,ii-1) M(:,1:end-ii+1)];
end
Z = vertcat(C{:})
Z = 12×4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 0 16 2 3 0 5 11 10 0 9 7 6 0 4 14 15 0 0 16 2 0 0 5 11
Z = cellfun(@(M,ii) [zeros(4,ii-1) M(:,1:end-ii+1)],repmat({M},1,3),num2cell(1:3),'uni',false);
Z = vertcat(Z{:})
Z = 12×4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 0 16 2 3 0 5 11 10 0 9 7 6 0 4 14 15 0 0 16 2 0 0 5 11

Weitere Antworten (0)

Kategorien

Mehr zu Get Started with MATLAB finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by