详解Python random.vonmisesvariate(获取von Mises 分布的随机数)函数的使用方法

  • Post category:Python

Python的random.vonmisesvariate函数简介

在Python的random模块中,提供了一个vonmisesvariate函数,用于生成符合德国数学家 von Mises—Fisher 分布(von Mises distribution )的随机数。

von Mises—Fisher 分布在采样的时候很有用,比如在网络中的随机游走过程中就会使用到von Mises—Fisher 分布随机采样。

Python的random.vonmisesvariate函数基本使用方法

其基本调用格式为:

random.vonmisesvariate(mu, kappa)

其中:

  • mu:均值参数,float类型
  • kappa:集中度参数,float类型

函数返回一个随机数。

注意:如果kappa越小,分布越分散,反之分布越集中。

Python的random.vonmisesvariate函数使用实例

下面提供两个应用实例。

实例一:生成von Mises分布随机数

import random
import matplotlib.pyplot as plt

mu = 0
kappa = 2.0
size = 1000

data = [random.vonmisesvariate(mu, kappa) for i in range(size)]

plt.hist(data, bins=50,normed=True)
plt.title("von Mises Fisher Distribution")
plt.show()

上述代码中的参数mu和kappa可以修改,以观察对应的随机分布变化。

实例二:将von Mises分布数据可视化

通常情况下,我们需要以某种形式展现出数据的特征。下面是生成的von Mises分布数据的可视化展示。

import random
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

mu = [2.0, 2.0, 2.0]
kappa = [1.0, 5.0, 10.0]

fig = plt.figure(figsize=(15, 5))

for i in range(3):
    ax = fig.add_subplot(1, 3, i+1, projection='3d')
    x = np.zeros(1000)
    y = np.zeros(1000)
    z = np.zeros(1000)
    for j in range(1000):
        x[j], y[j], z[j] = np.random.vonmises(mu[i], kappa[i], 3)
    ax.scatter(x, y, z, alpha=0.5)
    ax.set_title(f"mu={mu[i]}, kappa={kappa[i]}")

plt.show()

该代码将生成三个具有不同均值(mu)和集中度(kappa)的von Mises分布随机数,并且三个分布数据可视化图也呈现出不同的聚集、集中程度。