利用matlab/octave中的find实现基于数字索引的起始循环移位

利用matlab/octave中的find实现基于数字索引的起始循环移位,matlab,octave,bit-shift,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]) 我得到a=[3 5 7 9 11] a_ind=4 b=[5799113] 我正试图让circshift(b)从9点开始,然后 b=[9 11 3 5 7] 请注意

我正试图使用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])
我得到a=[3 5 7 9 11]

a_ind=4

b=[5799113]

我正试图让circshift(b)从9点开始,然后 b=[9 11 3 5 7]

请注意,索引会有所不同,所以我不能让circshift每次从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

下面是另一个对向量有用的选项:

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

circshift(a(:), -shift + 1)'
a(:)
保证您有一个列向量,并且
circshift
在行维度上移动,即它需要一个列向量。然后在末尾再次转置以恢复行向量。您希望向左移位,因此必须指定负移位