How to circ shift rows by different increments

21 visualizaciones (últimos 30 días)
hbcukid
hbcukid el 22 de Feb. de 2021
Comentada: hbcukid el 24 de Feb. de 2021
I have a 100x100 matrix and I am trying to figure how to shift them in different increments. For example I want row 1 to shift by none, row 2 by 10, row 3 by 20, row 4 by 30, and row 5 by 40 and for it to repeat this process every 5 rows. How can I achieve this?

Respuesta aceptada

hbcukid
hbcukid el 23 de Feb. de 2021
Editada: hbcukid el 24 de Feb. de 2021
A = rand(100,100);
Fill_Value = 0;
for Target_Group = 1: +5: length(A)
for Relative_Row = 0: 4
Row = Target_Group+Relative_Row;
Shift_Value = Relative_Row*10;
A(Row,:) = [Fill_Value*ones(1,Shift_Value) A(Row,1:end-Shift_Value)];
end
end
  2 comentarios
Stephen23
Stephen23 el 24 de Feb. de 2021
Simpler:
B = zeros(size(A));
for k = 1:size(A,1)
x = mod(k-1,5)*10;
B(k,1+x:end) = M(k,1:end-x);
end
hbcukid
hbcukid el 24 de Feb. de 2021
Oh wow thanks

Iniciar sesión para comentar.

Más respuestas (1)

Jan
Jan el 22 de Feb. de 2021
Editada: Jan el 22 de Feb. de 2021
What does "shift" mean? Circular shifting the elements? Adding a value to the contents of the elements?
A = rand(100, 100);
s = [0, 10, 20, 30, 40];
% For circular shifting the elements:
for k = 1:100
sk = s(mod(k - 1, 5)) + 1; % 1:100 -> 1,2,3,4,5,1,2,3,4,5,...
A(k, :) = circshift(A(k, :), sk);
end
% Or if "shift" means adding to the values is meant:
A = A + repmat(s(:), 20, 1);
Did this solve your homework? If so: Sorry. Please mention explicitly, if a question conserns homework, such that we can give useful hinbts instead of a solution.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by