GithubHelp home page GithubHelp logo

Update Interval module about fsharp.stats HOT 3 CLOSED

bvenn avatar bvenn commented on September 25, 2024
Update Interval module

from fsharp.stats.

Comments (3)

bvenn avatar bvenn commented on September 25, 2024

I'm updating the Interval module and move all functions within Intervals to members of an extended Interval<'a> type.

I noticed Intervals.getValueAt doesn't do what I'd expect.

/// Get the value at a given percentage within (0.0 - 1.0) or outside (&lt; 0.0, &gt; 1.0) of the interval. Rounding to nearest neighbour occurs when needed.
let inline getValueAt percentage (interval: Interval<'a>) =        
    match interval.trySize with
    | Some size -> percentage * (float size)
    | None      -> nan

The description suggests to have $minimum + percentage * size$. Additionally there seems to be no necessity for rounding.

from fsharp.stats.

bvenn avatar bvenn commented on September 25, 2024

https://github.com/fslaborg/FSharp.Stats/tree/update-interval

I ran into an issue when modeling the current functionalities as type members. Sometimes it is required to have a generic zero or to be able to divide interval endpoints:

https://github.com/fslaborg/FSharp.Stats/blob/534a34ad9f170318993639ff77ab950af6ea208a/src/FSharp.Stats/Intervals.fs#L134C27-L134C27

These constraints limit the Interval type for numeric values only and don't allow strings to be modeled as interval. I don't have a solution except for constraining all members of the Interval<'a> type to handle generic 'a and move specialized functions that only handles numeric values to a interval module (as it was before).

from fsharp.stats.

bvenn avatar bvenn commented on September 25, 2024

Should the implementation do a comparison in case the values are swapped, and what should occur if they are? - @smoothdeveloper

Mathematically intervals are invalid if the end is lower than the start. A comparison prior to the interval creation poses an issue. The endpoints of intervals can be defined by e.g. tuples, where the first element may be an index that has nothing to do with the interval itself.

let values = [(1,1); (2,5); (3,-3)]

Interval.ofSeqBy snd values
// throws an error because (3,-3) < (2,5) despite the fact, that the actual interval [-3,5] is valid

Of course we could limit the input types to be the comparable interval endpoints only, thereby removing the possibility to have custom types as input. But when thinking of multidimensional data, an interval of [(1,2,3),(2,1,4)] is invalid but [1,2,3] < [2,1,4] returns true. I thought the simpe check if start < end would be a simple solution, but obviously its not..

from fsharp.stats.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.