随机数1D函数的二维直方图

时间:2014-04-15 21:20:26

标签: python algorithm random histogram2d

我有一个N值的1D函数。我想制作一个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求和之后),我得不到宽度sigma相同的高斯!!

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)

为什么宽度在两种情况下都不相同?如果我用Ir加权r ** 0.5,则宽度相同(sigma = 0.5)。我在getImage2D函数中是否有任何错误?

0 个答案:

没有答案