How can I shift Right which is an array of numbers?
9 次查看(过去 30 天)
显示 更早的评论
I need is a new shifted array and eventually I want to add the arrays.(New Shifted array + Original Array). Can I do something like e.g . aa =[11 22 33 44]; bb = aa(2:4); % this is shifting left It gives bb = [22 33 44], but one value is dropped out. If possible can someone provide method to shift right and how to pad the dropped out value appropriately so that the size of the new array remains same as the original array?
0 个评论
采纳的回答
Azzi Abdelmalek
2013-2-14
编辑:Azzi Abdelmalek
2013-2-14
use circshift function
circshift(aa,[0 -1])
or
circshift(aa,[0 1])
7 个评论
Azzi Abdelmalek
2013-2-14
编辑:Azzi Abdelmalek
2013-2-14
n=2
x= [11;22;33;44;55;66]
x=circshift(x,[n 0])
x(1:n)=0 % or what you want
更多回答(2 个)
Image Analyst
2013-2-14
Not quire sure what you're describing about not dropping off any values and having bb be the same size as aa, but how about this:
aa =[11 22 33 44];
bb = zeros(size(aa))
bb(2:4) = aa(2:4)
% or
bb1 = zeros(size(aa))
bb1(1:3) = aa(2:4)
In the command window:
bb =
0 22 33 44
bb1 =
22 33 44 0
You can see there is a zero and no value is dropped off or lost and the size of bb is the same as aa. If one of those methods is not what you want, explain in more detail.
3 个评论
Image Analyst
2013-2-14
编辑:Image Analyst
2013-2-14
My solution will work. You just have to generalize it to "k" instead of fixed numbers of 2:4 like your example.
x = [11;22;33;44;55;66]
% k = -2;
k = +2;
s = zeros(size(x));
if k >= 1
s(k+1:end) = x(1:end-k)
elseif k <= -1
s(1:end+k) = x(-k+1:end)
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!