Jak skutecznie obliczyć macierz Gaussa jądra w numpy?
def GaussianMatrix(X,sigma):
row,col=X.shape
GassMatrix=np.zeros(shape=(row,row))
X=np.asarray(X)
i=0
for v_i in X:
j=0
for v_j in X:
GassMatrix[i,j]=Gaussian(v_i.T,v_j.T,sigma)
j+=1
i+=1
return GassMatrix
def Gaussian(x,z,sigma):
return np.exp((-(np.linalg.norm(x-z)**2))/(2*sigma**2))
To jest moja obecna ścieżka. Czy jest jakiś sposób, żebym mógł użyć do tego operacji macierzy? X to punkty danych.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
10 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
w scipy:
Zaktualizowana odpowiedź
Powinno to zadziałać - chociaż nadal nie jest w 100% dokładne, próbuje uwzględnić masę prawdopodobieństwa w każdej komórce siatki. Myślę, że użycie gęstości prawdopodobieństwa w środku każdej komórki jest trochę mniej dokładne, szczególnie w przypadku małych jąder. Zobacz przykład
https://homepages.inf.ed.ac.uk ... h.htm
https://homepages.inf.ed.ac.uk ... h.htm
.
Testowanie na przykładzie na rysunku 3 z linku:
daje
Oryginalna (zaakceptowana) odpowiedź poniżej zaakceptowana jest nieprawidłowa
pierwiastek kwadratowy jest niepotrzebny, a definicja przedziału jest nieprawidłowa.
Anonimowy użytkownik
Potwierdzenie od:
Oto moje kompaktowe rozwiązanie:
Anonimowy użytkownik
Potwierdzenie od:
Odpowiedź FuzzyDuck
https://stackoverflow.com/a/29731818/4527807
tutaj. Myślę, że to podejście jest krótsze i łatwiejsze do zrozumienia. Tutaj używam , aby uzyskać jądro 2D Gaussa.
Plotowanie go za pomocą :
https://i.stack.imgur.com/lpPQe.png
Anonimowy użytkownik
Potwierdzenie od:
Funkcja 2D Diraca
http://en.wikipedia.org/wiki/Dirac_delta_function, który będzie używał tej samej funkcji filtra:
Anonimowy użytkownik
Potwierdzenie od:
W przypadku małych rozmiarów jądra powinno to być wystarczająco szybkie.
Uwaga:
ułatwia to zmianę parametru sigma względem zaakceptowanej odpowiedzi.
Anonimowy użytkownik
Potwierdzenie od:
Możesz zwizualizować wynik za pomocą:
https://i.stack.imgur.com/X8VHo.png
Anonimowy użytkownik
Potwierdzenie od:
Rozszerza do trójwymiarowej tablicy wszystkich różnic i przejmuje ostatni wymiar.
Więc mogę zastosować to do twojego kodu, dodając parametr do twojego :
produkuje
Połączenie:
Anonimowy użytkownik
Potwierdzenie od:
Za pomocą poniższego kodu możesz również użyć różnych Sigm dla każdego wymiaru
Anonimowy użytkownik
Potwierdzenie od:
Użyj i wyjdź
Maks. pod adresem: (2, 2)
forma jądra (10, 10)
https://i.stack.imgur.com/yBuLm.png
maks. przy: (40, 25)
forma jądra (50, 100)
https://i.stack.imgur.com/GMEqj.png
Anonimowy użytkownik
Potwierdzenie od:
Na przykład, oto funkcja jednowierszowa dla poprawki 3x5.
Otrzymasz takie wyniki:
Możesz przeczytać więcej o Gauss scipy
tutaj
https://docs.scipy.org/doc/sci ... .html
.