LINUX.ORG.RU

История изменений

Исправление Axon, (текущая версия) :

С би- и мультимодальными распределениями беда

Да нет никакой беды.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import maxwell
from scipy.optimize import curve_fit

def maxwell_bimodal(x, n, loc1, scale1, loc2, scale2):
    P0 = maxwell.pdf(x, loc1, scale1) * (1 - n)
    P1 = maxwell.pdf(x, loc2, scale2) * n
    return(P0 + P1)

# Генерируем бимодальные данные для примера
data = np.hstack((maxwell.rvs(size=1000, loc=1, scale=1), maxwell.rvs(size=300, loc=3, scale=1))) 

binwidth = .2
bins = np.arange(0, data.max(), binwidth)
counts, binedges = np.histogram(data, bins=bins, normed=True)
bincenters = .5 * (binedges[1:] + binedges[:-1])
p0 = [.5, 1, 2, 5, .5] # Заменить на подходящие начальные параметры
popt, pcov = curve_fit(maxwell_bimodal, bincenters, counts, p0=p0)

plt.figure()
plt.hist(data, bins=bins, normed=True, color='black', alpha=.5)
plt.plot(bincenters, maxwell_bimodal(bincenters, *popt), color='red')
plt.fill(bincenters, (1 - popt[0]) * maxwell.pdf(bincenters, *popt[1:3]), alpha=.3, color='red')
plt.fill(bincenters, popt[0] * maxwell.pdf(bincenters, *popt[3:]), alpha=.3, color='red')
plt.show()

Исправление Axon, :

С би- и мультимодальными распределениями беда

Да нет никакой беды.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import maxwell
from scipy.optimize import curve_fit

def maxwell_bimodal(x, n, loc1, scale1, loc2, scale2):
    P0 = maxwell.pdf(x, loc1, scale1) * (1 - n)
    P1 = maxwell.pdf(x, loc2, scale2) * n
    return(P0 + P1)

# Генерируем бимодальные данные для примера
data = np.hstack((maxwell.rvs(size=1000, loc=1, scale=1), maxwell.rvs(size=300, loc=3, scale=1))) 

binwidth = .2
bins = np.arange(0, data.max(), binwidth)
counts, binedges = np.histogram(data, bins=bins, normed=True)
bincenters = .5 * (binedges[1:] + binedges[:-1])
p0 = [.5, 1, 2, 5, .5] # Заменить на подходящие начальные параметры
popt, pcov = curve_fit(maxwell_bimodal, bincenters, counts, p0=p0)

plt.figure()
plt.hist(data, bins=bins, normed=True, color='black', alpha=.5)
plt.plot(bincenters, maxwell_bimodal(bincenters, *popt), color='green')
plt.fill(bincenters, (1 - popt[0]) * maxwell.pdf(bincenters, *popt[1:3]), alpha=.3, color='green')
plt.fill(bincenters, popt[0] * maxwell.pdf(bincenters, *popt[3:]), alpha=.3, color='green')
plt.show()

Исходная версия Axon, :

С би- и мультимодальными распределениями беда

Да нет никакой беды.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import maxwell
from scipy.optimize import curve_fit

def maxwell_bimodal(x, n, loc1, scale1, loc2, scale2):
    P0 = maxwell.pdf(x, loc1, scale1) * (1 - n)
    P1 = maxwell.pdf(x, loc2, scale2) * n
    return(P0 + P1)

# Генерируем бимодальные данные для примера
data = np.hstack((maxwell.rvs(size=1000, loc=1, scale=1), maxwell.rvs(size=300, loc=3, scale=1))) 

binwidth = .2
bins = np.arange(0, data.max(), binwidth)
counts, binedges = np.histogram(data, bins=bins, normed=True)
bincenters = .5 * (binedges[1:] + binedges[:-1])
p0 = [.5, 1, 2, 5, .5] # Заменить на подходящие начальные параметры
popt, pcov = curve_fit(maxwell_bimodal, bincenters, counts, p0=p0)
n = popt[0]

plt.figure()
plt.hist(data, bins=bins, normed=True, color='black', alpha=.5)
plt.plot(bincenters, maxwell_bimodal(bincenters, *popt), color='green')
plt.fill(bincenters, (1 - n) * maxwell.pdf(bincenters, *popt[1:3]), alpha=.3, color='green')
plt.fill(bincenters, n * maxwell.pdf(bincenters, *popt[3:]), alpha=.3, color='green')
plt.show()