Как преобразовать двумерное нормальное распределение в двумерное распределение lognorm в python - PullRequest
0 голосов
/ 25 октября 2018

Мой вопрос состоит из двух частей, одна из которых состоит в том, как определить двумерную функцию lognorm, которая занимает позиции x и y и возвращает вывод lognorm.Затем я хочу взять этот вывод и использовать его в качестве измерения z на трехмерном графике поверхности.Поэтому моя цель - построить двумерное распределение lognorm в виде трехмерного графика поверхности.Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018
dx = 90 - (-90)
dy = 90 - (-90)
c = [dx + dx/2.0, dy+dy/2.0]
z = np.zeros((400, 400))
x = np.linspace(-90, 90, 400)
y = x.copy()
for i in range(len(x)):
    for j in range(len(y)):
        p =[x[i], y[j]]
        d = math.sqrt((p[0]-c[0])**2 + (p[1]-c[1])**2)
        t = d

        z[i][j] = lognorm.pdf(t, 1.2)




fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
ax.plot_surface(x,y, z, cmap = 'viridis')



plt.show()

хорошо, вот код, который я написал, и вывод наверняка попал туда, но выглядит немного странно.Я прикрепил его для вас, пожалуйста, посмотрите, можете ли вы дать какие-либо рекомендации. введите описание изображения здесь

0 голосов
/ 25 октября 2018

Вот суть, я не проверял, но логика не слишком сложна.это также может быть векторизуемым для ускорения, но вы должны отобразить ваши linspaces в один длинный массив 2D векторов.

dx = xMax - xMin
dy = yMax - yMin
c= (dx+dx/2.0,dy+dy/2.0)
z=np.array(shape=(N,M))
#Lets use a cartersian input vector space instead of polar
for i in range(len(xlinspace)):
    for j in range(len(ylinspace)):
        p=(xlinspace[i],ylinspace[j])
        d= np.norm(p-c) # produce a distance form the centre for the smapled point
        t=d #I'm just renaming distance to t to make it clear, this is an extra step as far as the program is concerned.
        #Now put your lognorm logic here, i'll use f as a placeholder function
        z[i][j]=f(t)
#You now have a 2d array of z outputs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...