【问题标题】:starting circshift based on index of a number using find in matlab / octave使用matlab / octave中的find根据数字的索引启动circshift
【发布时间】:2013-07-30 18:21:00
【问题描述】:

我正在尝试使用 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]

我正在尝试让 circshift (b) 从 9 开始并有 b = [9 11 3 5 7]

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

【问题讨论】:

    标签: matlab octave bit-shift


    【解决方案1】:

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

    a=[3:2:11];
    shift = find(a==9);
    
    circshift(a(:), -shift + 1)'
    

    a(:) 保证你有一个列向量,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
      

      【讨论】:

        猜你喜欢
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        • 2018-08-02
        • 2016-03-31
        • 2015-07-22
        • 2014-10-06
        相关资源
        最近更新 更多