2D гистограмма 1D функции случайного числа
У меня есть 1D функция N значений. Я хочу создать 2D-гистограмму, чтобы получить изображение размером nx*ny пикселей и затем вырезать суммирование изображения по 1 измерению. Функция до и после должна быть одинаковой. Я пытался с гауссовским, но мне не хватает фактора sqrt. Пожалуйста, смотрите код. Я что-то упустил в своей функции?
Я рисую r из случайного числа
import numpy as np
import random
import matplotlib.pyplot as plt
sigma=0.5
N=100000
r=np.random.normal(0, sigma, N)
ind = np.where( r>=0 )
r =r[ind]
N=len(r)
phi=2*np.pi*np.random.rand(N)
x=r*np.cos(phi)
y=r*np.sin(phi)
Ir=np.zeros(N)
Ir[:]=1
Теперь я хочу видеть распределение Ir=f(x, y) как 2D-изображение.
def getImage2D(x, y, fun, nx=100, ny=100, xmin=-1, xmax=1, ymin=-1, ymax=1):
dx=(xmax-xmin)*(1.0/nx);
dy=(ymax-ymin)*(1.0/ny);
image = np.ndarray(shape=(nx, ny), dtype=float); image.fill(0.0)
for i in range(len(fun)):
mr = (x[i]-xmin)/dx;
nr = (y[i]-ymin)/dy;
m, n=int(mr), int(nr)
image[m, n]=image[m, n]+fun[i];
return image
P=getImage2D(x, y, Ir, nx=101, ny=101, xmin=-3, xmax=3, ymin=-3, ymax=3)
#P=getImage2D(x, y, r**0.5*Ir, nx=101, ny=101, xmin=-3, xmax=3, ymin=-3, ymax=3)
Px=np.sum(P, axis=1)
Px=Px/np.max(Px)
plt.figure()
plt.imshow(P)
plt.show(block=False)
Если я нанесу отрезок Px (после суммирования по y), я не получу тот же гауссиан сигма ширины!!
v=np.linspace(np.min(r), np.max(r), len(r))
v=v/np.max(v)
plt.figure()
plt.plot(np.linspace(-3, 3, 101), Px)
plt.plot(np.sort(r)[::-1], v, 'g')
plt.show(block=False)
Почему ширина не одинакова в обоих случаях? Если я добавлю вес r**0,5 с Ir, то ширина будет такой же (сигма =0,5). Есть ли ошибка, которую я делаю в функции getImage2D?