Left shift is not working

Hi. I am trying to left shift of a m by n matrix but its not working.
PP = [1 2 3 4 %PP can be any size
1 2 3 4,
1 2 3 4]
I want:
PP = [1 2 3 4
2 3 4 0
3 4 0 0]
I used following code(Here i have to use loop because PP actually a very large size matrrix):
[rows cols]= size(PP);
B = zeros(size(PP));
for i = 1:rows
B = zeros(size(PP));
PP_shift(i, :) = [PP(i,(cols:-1:i)) B(1,(i-1))];
end
PP_shift
But its showing me error. Can anyone please help me? Thanks.

2 件のコメント

Knut
Knut 2011 年 12 月 14 日
I dont have Matlab here, but could you not do something like:
[rows cols]= size(PP);
PP_shift = zeros(size(PP));
for i = 1:rows
PP_shift(i,1:end-i+1) = PP(i,i:end);
end
PP_shift
BTW, there is probably some neat 2d/1d way of indexing PP that will give you the desired result with faster execution. Perhaps ind2sub().
Ayesa
Ayesa 2011 年 12 月 14 日
Thank you so much. It works perfectly. Again many thanks.

サインインしてコメントする。

回答 (1 件)

Walter Roberson
Walter Roberson 2011 年 12 月 14 日

0 投票

If "i" is the number of rows, then why are you using "i" to index the second dimension of B, which is the position for the column number?
Hint: B does not need to be a full-sized array; it could be a vector.

2 件のコメント

Ayesa
Ayesa 2011 年 12 月 14 日
I use "i" to index the second dimension of B because for each row of PP_shift, there should be (i-1) column zeros of B inserted. So when rows = 1, B is a empty matrix, rows = 2, B is a 1 by 1 matrix ,when rows = 3, B is a 1 by 2 matrix and so on.
Otherwise how can i do that?
Walter Roberson
Walter Roberson 2011 年 12 月 14 日
Suppose PP is (say) 5 by 3. Then you would create B as 5 by 3 because you create it the same size as PP. Then when you got to row 5 (i=5) you would be trying to index B at (1,i-1) would would be (1,4) which would not exist because B would only be 3 wide.
hint: in your PP_shift line, replace B by the word zeros

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeShifting and Sorting Matrices についてさらに検索

製品

質問済み:

2011 年 12 月 14 日

Community Treasure Hunt

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

Start Hunting!

Translated by