Pythonで正規直交行列をランダムに作成する方法はありますか?おそらくnumpyを使用していますか?または、複数のnumpyメソッドを使用して正規直交行列を作成する方法はありますか?ありがとう。pythonでランダムな正規直交行列を作成する方法numpy
10
A
答えて
5
これはrvs
方法は、最小限の変更で、https://github.com/scipy/scipy/pull/5622/filesから引っ張られ、例えばhttps://github.com/scipy/scipy/pull/5622
です。
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
それはあなたの要素とn x n
マトリックスのQR
分解を行うことにより、ランダムn x n
直交行列Q
、(均一n x n
直交行列のマニホールドにわたって分布)を得ることができるウォーレンの試験、https://stackoverflow.com/a/38426572/901925
13
scipyのバージョン0.18はscipy.stats.ortho_group
とscipy.stats.special_ortho_group
です。ちょうど十分なスタンドアローンnumpyの機能として実行する - それが追加されたプルリクエストは
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.]])
7
に一致i.i.d.平均0
および分散1
のガウス確率変数。次に例を示します。
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]]
0
あなたは正規直交列ベクトルとどれも正方行列を希望しない場合は、あなたが言及した方法のいずれかの正方形を作成し、いくつかの列をドロップすることができます。
関連する問題
- 1. mathematicaでシンボリック正規直交行列を作成する
- 2. Python numpy配列をカスタム方法で作り直す
- 3. Pythonを使ってNumpyでランダムな行列を追加する
- 4. matlabに与えられたベクトルで正規直交行列を作成する際の問題
- 5. Pythonでランダム共分散行列を生成する方法は?
- 6. numpyの配列でサブアレイを正規化する方法
- 7. Python:交差インデックスnumpy配列
- 8. numpyで単位行列を作成する方法
- 9. numpy行列で行を正規化する
- 10. pythonでランダムな幅のキューブを作成する方法
- 11. 順列行列を作成する - numpy
- 12. numpyの:ランダムな文字列を作成し、均一な
- 13. 別のサイズと同じサイズのランダムなnumpy行列を作成します。
- 14. ランダムに直接表示を作成する方法
- 15. Pythonで行列の大きな行列を作成する方法は?
- 16. Pythonでnumpyで2つの行列を結合する方法
- 17. 配列を使ってランダムな行列を作る方法
- 18. Python NumPyで列に行をブロードキャストする方法は?
- 19. 複数のPython正規表現を作成してインポートを行う方法
- 20. Pythonで2つの配列からインジケータ行列を作成するNumpy
- 21. 効率的なKroneckerプロダクト、単位行列と規則的な行列 - NumPy/Python
- 22. Numpy:行列をn個の異なる行列にランダムに分割/選択する方法
- 23. Objective CでNSArrayをランダムに正規化する方法
- 24. pythonで非テキストバイナリファイルの正確なコピーを作成する方法
- 25. Pythonの直交座標系変換と直交しない
- 26. 2つのpython行列を結合する方法numpy
- 27. numpyでランダムなリターンをシミュレートする方法
- 28. 正規表現での結果を作成する方法
- 29. Python/Numpyにおける正規方程式の実装
- 30. 2次元配列をpython 2.7とnumpyで作成する
ありがとうございます。私は与えられた答えがすべて正方行列であることに気付いた。この方法を使ってd x k行列を得ることはできますか?k
Dacion