2016-09-26 3 views
0

У меня есть функция, которая принимает один 2D-вектор и возвращает PDF (скаляр) этой точки.Функция построения (x, y) с 3D-графикой

В качестве иллюстрации myPDF(np.array[4,4]) возвращает одно значение pdf в < 4,4>. Эта функция не может принимать список векторов, и она принимает только один 2D-вектор в качестве аргумента.

Теперь я хочу, чтобы построить этот PDF-файл с помощью plot_surface, как показано ниже: enter image description here Это то, что я пытался

x = np.arange(-10,10) 
y = np.arange(-10,10) 
z = [ myPDF(np.array([xx,yy])) for xx in x for yy in y] 
xy = [ [xx, yy] for xx in x for yy in y] 

И здесь я застрял. Мне нужно как-то изменить z и xy в некоторых правильных формах, чтобы использовать их с plot_surface, но я не знаю, как это сделать. Я также попробовал meshgrid, но не знал, как преобразовать различные формы данных в законные формы для plot_surface.

x, y = np.mgrid[-5:5,-5:5] 

Если я использую mgrid, как указано выше, он дает мне матрицу 10x10. Затем я должен сгенерировать соответствующие значения z в матрице 10x10 с помощью моей функции, но не смог найти способ разложения x и y, генерировать значения z и переформатировать z в правильной форме.

Основная проблема заключается в том, что у меня мало знаний в области управления данными, поэтому не удалось найти хороший способ выполнить эту задачу. Таким образом, я хотел бы узнать правильный способ создания набора данных для plot_surface, используя мою функцию pdf.

Что такое хороший способ генерации точек данных, чтобы построить такой рисунок, используя мою функцию pdf? Спасибо, что помогли этому newB!

+1

* «Я пытался arange, meshgrid и так далее, но не мог найти способ, чтобы сделать правильные точки данных» * - в чем была проблема с этими методами? Покажите нам свой код. –

+0

@ali_m Я только что добавил то, что я пробовал. Спасибо за вашу помощь! – noclew

ответ

1

Использование apply_along_axis

xy = np.stack(np.mgrid[-5:5,-5:5], axis=-1)  # xy[0,0] = x, y 
z = np.apply_along_axis(myPDF, axis=-1, arr=xy) # z[0,0] = myPDF(xy[0,0]) 
+0

wow Большое спасибо !!!!!! – noclew

+0

Кстати, почему ось равна -1? – noclew

+0

На самом деле это не имеет значения, но 'axis = -' делает« x или y »последней осью, которая делает' (xij, yij) == (xy [i, j, 0], xy [i, j, 1]) == xy [i, j] '. Вы могли бы выбрать другую ось, но тогда 1 и 0 не были бы последними. – Eric

Смежные вопросы