Code Monkey home page Code Monkey logo

Comments (5)

AlexandreDecan avatar AlexandreDecan commented on June 5, 2024

Hello,

Which kind of intervals are you using? I mean: are they based on numerical values, dates, etc.? Also, depending on the type, these intervals can be continuous (e.g. floats) or pseudo-discrete (e.g. dates), leading to a different problem ;)

[Edited: Also, I guess that you want each value to have the exact same probability to be taken?]

from portion.

cannolis avatar cannolis commented on June 5, 2024

Hi @AlexandreDecan,
Just as you said, these intervals are mainly based on numerical values, and I want to get random values in same probability.
Although there is some method to get values from a range in model "random", but the boundary is hard to handle with the interval instance.

from portion.

AlexandreDecan avatar AlexandreDecan commented on June 5, 2024

Hi,

A very naive, pretty inefficient, way to do this would be to generate a random value and check if it is contained in the interval. Let's assume that your interval is interval, and that it is lower and upper bounded (i.e. its bounds are distinct from P.inf and -P.inf). Then the code could be:

while True:
  x = random.uniform(interval.lower, interval.upper)
  if x in interval: 
    break

By the way, this could be very inefficient, especially if there are many "gaps" in your interval.

Another way, more efficient, would be to work with atomic intervals (i.e. intervals that have no "gap"). The first step is to select one of them, then to generate a value between its bounds. Obviously, not all atomic intervals should have the same weights, since some of them are "smaller" than some other ones.

weights = [x.upper - x.lower for x in interval]
atomic = random.choices(interval, weights=weights, k=1)[0]
while True:
  x = random.uniform(atomic.lower, atomic.upper)
  if x in atomic:
    break

The while loop is still needed, since we are generating a number between atomic.lower and atomic.upper and that one of them could be P.OPEN (i.e. should not be selected). This loop is however far more efficient than the one of the first example, as it will only be executed more than once if x == atomic.lower and atomic.left == P.OPEN or x == atomic.upper and atomic.right == P.OPEN.

Notice that I have not tested these snippets yet :-)

from portion.

cannolis avatar cannolis commented on June 5, 2024

Thank you very much!
I think the methods you mentioned can really help me with the problem, and I truly appreciate your timely help ;)

from portion.

AlexandreDecan avatar AlexandreDecan commented on June 5, 2024

You're welcome! :-)

from portion.

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.