Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typecast to an int in Octave/Matlab

I need to call the index of a matrix made using the linspace command, and based on some data taken from an oscilloscope. Because of this, the data inputed is a double. However, I can't really call:

Time[V0Found]

where V0Found is something like 5.2 however, taking index 5 is close enough, so I need to drop the decimal. I used this equation to drop the decimal:

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

However, even though that drops the decimal, octave still complains about it.

So, what can I do to typecast it to an int?

like image 782
Leif Andersen Avatar asked Oct 23 '25 21:10

Leif Andersen


2 Answers

In MATLAB, it should be int8(x) or int16(x) or one of the other integer casts.

But I'm surprised you need to do that for an index. Try

myarray(floor(indexlist))

or

myarray(round(indexlist))

where myarray is your array and indexlist is your vector of noninteger indices.


example:

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
like image 180
Jason S Avatar answered Oct 25 '25 10:10

Jason S


You could use round, floor, ceil functions instead of your formula to do the rounding.

By the way, indexing is done using parenthesis instead of brackets so:

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

In case that was your problem

like image 37
Azim J Avatar answered Oct 25 '25 11:10

Azim J