使用matlab / octave中的find,根据数字索引开始circshift

时间:2013-07-30 09:52:21

标签: matlab octave bit-shift

我正在尝试使用find命令在数字的特定索引处启动circshift我该怎么做?请参阅下面的示例代码

%test find and circshift
a=[3:2:11]

%find index of number and start there
a_ind=find(a==9)
b=circshift(a,[0 a_ind])

我得到了= [3 5 7 9 11]

a_ind = 4

b = [5 7 9 11 3]

我正试图让环球(b)从9开始并且有 b = [9 11 3 5 7]

请注意a_ind会有所不同,所以我不能每次都从2开始转载

2 个答案:

答案 0 :(得分:4)

这是另一个对矢量有用的选项:

a=[3:2:11];
shift = find(a==9);

circshift(a(:), -shift + 1)'

a(:)保证您在行维度上进行列向量和circshift移位,即它需要列向量。然后在最后再次转置以恢复行向量。你想向左移动,所以你必须指定负移位。

答案 1 :(得分:2)

我想你想要

>> circshift(a,[0 (length(a)-a_ind+1)])
ans =

    9   11    3    5    7

如果我尝试使用其他向量a

>> a=[3:1:11]
a =

    3    4    5    6    7    8    9   10   11

>> a_ind=find(a==9)
a_ind =  7
>> circshift(a,[0 (length(a)-a_ind+1)])
ans =

    9   10   11    3    4    5    6    7    8