How to circ shift rows by different increments

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?

 채택된 답변

hbcukid
hbcukid 2021년 2월 23일
편집: hbcukid 2021년 2월 24일
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

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
Oh wow thanks

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

추가 답변 (1개)

Jan
Jan 2021년 2월 22일
편집: Jan 2021년 2월 22일
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.

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

2021년 2월 22일

댓글:

2021년 2월 24일

Community Treasure Hunt

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

Start Hunting!

Translated by