在Octave / Matlab中对一个int进行类型转换

时间:2010-03-31 22:06:22

标签: arrays matlab indexing octave casting

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

Time[V0Found]

其中V0Found类似于5.2但是,索引5足够接近,所以我需要删除小数。我使用这个等式来删除小数:

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

然而,即使小数点滴,但八度音仍然会抱怨它。

那么,我可以做些什么来将它强制转换为int?

3 个答案:

答案 0 :(得分:5)

在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

答案 1 :(得分:2)

您可以使用 round floor ceil 函数代替公式进行舍入。

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

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

如果那是你的问题

答案 2 :(得分:0)

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

  

yout = interp1(xdata,ydata,xin,...)   要么   yout = interp1(ydata,xin,...)   其中xdata被假定为1:length(ydata)

如果你想产生调用

的结果
  

V0FoundDec =时间(round(V0found))

你会说

  

V0FoundDec = interp1(时间,V0found,'最近')

但您可以轻松地使用

进行线性插值(这是默认设置)
  

V0FoundDec = interp1(时间,V0found)

  

V0FoundDec = interp1(时间,V0found,'线性')

你也可以在限制之外进行推断(使用'extrap'或提供extrap值),其中

  

时间(圆(V0found))

如果是圆形(V0found)<

将崩溃1或>长度(时间)