Вычисление многомерного распределения Гаусса по num apply_along_axisPython

Программы на Python
Ответить
Anonymous
 Вычисление многомерного распределения Гаусса по num apply_along_axis

Сообщение Anonymous »

Я хочу вычислить многомерный гауссиан для многоканального изображения. Для этой цели мне нужно рассматривать каждый пиксель с его значением в разных диапазонах как вектор, чтобы применить гауссиан, который содержит матричное умножение V^T*inv(ковариация)*V.

Код: Выделить всё

import numpy as np
import numpy.linalg as lg
X,Y=np.meshgrid(np.arange(-10,11,1/10),np.arange(-10,11,1/10),indexing='xy')
Z=np.stack((X,Y))
cov=np.array([[10,-0.4],[-0.4,1]])
W=lg.inv(cov)
def ee(x):
global W
x=x.reshape((-1,1))

return lg.matmul(lg.matmul(x.transpose(),W),x)[0,0]
tt=np.apply_along_axis(ee,0,Z)
p=np.exp(-0.5*tt)/(np.power(2*np.pi,cov.shape[0]/2)*np.power(lg.det(cov),0.5))
import matplotlib.pyplot as plt
plt.imshow(p)

введите здесь описание изображения
Я нашел решение apply_along_axis, но размер моего изображения (3,1000,1000), а apply_along_axis работает очень медленно примените функцию к пикселям, чтобы найти вероятность каждого пикселя. Как я могу ускорить его для реальных приложений. Спасибо

Подробнее здесь: https://stackoverflow.com/questions/791 ... along-axis
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»