代码之家  ›  专栏  ›  技术社区  ›  Leif Andersen

在Octave/Matlab中将类型转换为int

  •  3
  • Leif Andersen  · 技术社区  · 14 年前

    我需要调用使用linspace命令生成的矩阵的索引,并基于从示波器获取的一些数据。因此,输入的数据是双精度的。但是,我不能打电话给:

    Time[V0Found]
    

    然而,v0found类似于5.2,取索引5就足够了,所以我需要去掉小数点。我用这个公式减去小数:

    V0FoundDec = V0Found - mod(V0Found,1)
    Time[V0FoundDec]
    

    然而,即使这个数字降到小数点,八度仍然抱怨它。

    那么,我该怎么做才能把它打印成int?

    3 回复  |  直到 7 年前
        1
  •  5
  •   Jason S    14 年前

    在matlab中,应该是 int8(x) int16(x) one of the other integer casts .

    但我很惊讶你需要为一个索引这样做。尝试

    myarray(floor(indexlist))
    

    myarray(round(indexlist))
    

    在哪里? myarray 是你的阵列和 indexlist 是非整数索引的向量。


    例子:

    octave-3.2.3:8> v=rand(1,8)*10+1
    v =
    
       3.1769   1.4397   8.7504   1.7424   6.9413   3.1663   8.4085   9.0179
    
    octave-3.2.3:9> a = (1:1:20).^2
    a =
    
     Columns 1 through 15:
    
         1     4     9    16    25    36    49    64    81   100   121   144   169   196   225
    
     Columns 16 through 20:
    
       256   289   324   361   400
    
    octave-3.2.3:10> a(floor(v))
    ans =
    
        9    1   64    1   36    9   64   81
    
        2
  •  2
  •   Azim J    14 年前

    你可以使用 , 地板 , 塞尔 函数而不是公式来进行舍入。

    顺便说一下,索引是使用括号而不是括号来完成的,因此:

    V0FoundDec = round(V0Found);
    Time(V0FoundDec) % not Time[V0FoundDec]
    

    万一那是你的问题

        3
  •  0
  •   Marc    14 年前

    在matlab中,正确的方法是使用interp1命令进行插值。此命令的格式为

    Yout=Interp1(扩展数据、Ydata、Xin,…) 或 Yout=Interp1(Ydata,Xin,…) 其中xdata假定为1:长度(ydata)

    如果你想产生结果,你可以通过电话

    v0FoundDec=时间(圆形(v0Found))。

    你会说

    v0founddec=interp1(时间,v0founded,'最近')

    但你也可以很容易地得到线性插值(这是默认值)

    v0founddec=interp1(时间,v0founded)

    v0founddec=interp1(时间,v0found,'线性')

    您还可以在限制之外进行外推(使用“extrap”或提供extrap值),其中

    时间(圆形(找到v0))

    如果找到圆形(v0)将崩溃<1或>长度(时间)