Czy istnieje metoda, którą mogę wywołać, aby utworzyć losową ortonormalną macierz w python? Być może używając numpy? A może istnieje sposób na stworzenie macierzy ortonormalnej za pomocą wielu metod numpy? Dzięki.Jak utworzyć losową ortonormalną macierz w python numpy
Odpowiedz
Jest to metoda rvs
wyciągnął z https://github.com/scipy/scipy/pull/5622/files, z minimalną zmianą - wystarczy uruchomić jako samodzielna funkcja numpy.
import numpy as np
def rvs(dim=3):
random_state = np.random
H = np.eye(dim)
D = np.ones((dim,))
for n in range(1, dim):
x = random_state.normal(size=(dim-n+1,))
D[n-1] = np.sign(x[0])
x[0] -= D[n-1]*np.sqrt((x*x).sum())
# Householder transformation
Hx = (np.eye(dim-n+1) - 2.*np.outer(x, x)/(x*x).sum())
mat = np.eye(dim)
mat[n-1:, n-1:] = Hx
H = np.dot(H, mat)
# Fix the last sign such that the determinant is 1
D[-1] = (-1)**(1-(dim % 2))*D.prod()
# Equivalent to np.dot(np.diag(D), H) but faster, apparently
H = (D*H.T).T
return H
Dopasowuje testu Warren, https://stackoverflow.com/a/38426572/901925
Wersja 0.18 scipy ma scipy.stats.ortho_group
i scipy.stats.special_ortho_group
. Żądanie ciągnąć gdzie została dodana jest https://github.com/scipy/scipy/pull/5622
Na przykład
In [24]: from scipy.stats import ortho_group # Requires version 0.18 of scipy
In [25]: m = ortho_group.rvs(dim=3)
In [26]: m
Out[26]:
array([[-0.23939017, 0.58743526, -0.77305379],
[ 0.81921268, -0.30515101, -0.48556508],
[-0.52113619, -0.74953498, -0.40818426]])
In [27]: np.set_printoptions(suppress=True)
In [28]: m.dot(m.T)
Out[28]:
array([[ 1., 0., -0.],
[ 0., 1., 0.],
[-0., 0., 1.]])
można uzyskać losową n x n
ortogonalną macierz Q
, (rozmieszczone równomiernie kolektora n x n
macierzy ortogonalnych) przeprowadzając QR
faktoryzacji w n x n
matrycy z elementami i.i.d. Zmienne losowe Gaussa o średniej 0
i wariancji 1
. Oto przykład:
import numpy as np
from scipy.linalg import qr
n = 3
H = np.random.randn(n, n)
Q, R = qr(H)
print (Q.dot(Q.T))
[[ 1.00000000e+00 -2.77555756e-17 2.49800181e-16] [ -2.77555756e-17 1.00000000e+00 -1.38777878e-17] [ 2.49800181e-16 -1.38777878e-17 1.00000000e+00]]
jeśli chcesz żaden macierzy kwadratowej z ortonormalnych wektorów kolumnowych można utworzyć kwadrat jeden z którymkolwiek z wymienionych metod i upuść kilka kolumn.
- 1. jak stworzyć macierz podobieństwa w numpy python?
- 2. Jak utworzyć pustą tablicę/macierz w NumPy?
- 3. Co oznacza macierz ** 2 w python/numpy?
- 4. Jak utworzyć macierz 3 wymiarów w numpy, np. Matlab a (:,:, :)
- 5. Jak zdecydować, czy macierz jest pojedyncza w python-numpy?
- 6. Jak utworzyć losową permutację tablicy?
- 7. Jak utworzyć macierz JSON?
- 8. Numpy modyfikować macierz w miejscu?
- 9. Python 3: Pomnożenie wektora przez macierz bez NumPy
- 10. Jak wygenerować ujemną wartość losową w python
- 11. Jak stworzyć losową macierz taką, że wszystkie wiersze suma 1
- 12. Utwórz pustą macierz Python
- 13. Macierz Numpy plus wektor kolumnowy
- 14. Jak utworzyć macierz list w R?
- 15. Python - oblicz macierz współwystępowania
- 16. Python wybierz losową datę w bieżącym roku
- 17. Jak mogę przekształcić bloki w macierz blokowo-ukośną (NumPy)
- 18. Wyzeruj macierz o wyższej przekątnej, używając numpy
- 19. Jak utworzyć dwuwymiarową macierz długości dynamicznej?
- 20. Jak utworzyć losową 256-bitową liczbę całkowitą w Dart?
- 21. Jak utworzyć losową liczbę po logormalnej dystrybucji w programie excel?
- 22. utworzyć macierz komórkową ciągów matlab
- 23. Jak utworzyć tablicę z rekordową numpy C
- 24. Jak podzielić macierz na 4 bloki za pomocą numpy?
- 25. Python: wieloprocesorowość i macierz c_char_p
- 26. Transponuj macierz w Pythonie
- 27. Jak importować numpy w python shell
- 28. JavaScript - Jak utworzyć losową długość i szerokości geograficzne?
- 29. Generowanie gęstej matrycy z rozrzedzony matrycy w python numpy
- 30. Jak utworzyć macierz komórek z podobnych obiektów w programie Matlab?
Dziękuję za odpowiedź. Zauważyłem, że podane odpowiedzi dotyczą wyłącznie macierzy kwadratowych. Czy nadal mogę użyć tej metody do uzyskania macierzy d x k, gdzie k
Dacion