Skip to content

Instantly share code, notes, and snippets.

@qihongl
Created April 23, 2024 16:21
Show Gist options
  • Select an option

  • Save qihongl/0f2938e2eff2ce2c025f4a3b7d821ba1 to your computer and use it in GitHub Desktop.

Select an option

Save qihongl/0f2938e2eff2ce2c025f4a3b7d821ba1 to your computer and use it in GitHub Desktop.

Revisions

  1. qihongl created this gist Apr 23, 2024.
    40 changes: 40 additions & 0 deletions walk-on-a-sphere.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns


    sns.set(style='white', palette='colorblind', context='talk')
    cpal = sns.color_palette('colorblind')


    import numpy as np

    def random_walk_on_sphere(n, T, epsilon=0.05):
    # Initialize the position on the sphere
    position = np.random.randn(n)
    position /= np.linalg.norm(position)

    # Path of the random walk
    path = [position.copy()]

    for _ in range(T):
    # Generate a small random perturbation
    perturbation = np.random.randn(n) * epsilon
    # Move to the new position
    new_position = position + perturbation
    # Normalize to stay on the sphere
    new_position /= np.linalg.norm(new_position)
    position = new_position

    # Store the position
    path.append(position.copy())

    return np.array(path)

    # Example of a random walk on a 3-dimensional sphere with 100 steps
    n = 20
    T = 100
    path = random_walk_on_sphere(n, T)


    sns.heatmap(np.corrcoef(path))