如何在python numpy中创建随机正交矩阵

发布于 2021-01-29 15:23:57

我可以调用一种方法在python中创建随机正交矩阵吗?可能使用numpy吗?还是有一种使用多个numpy方法创建正交矩阵的方法?谢谢。

关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是rvshttps://github.com/scipy/scipy/pull/5622/files中提取的方法,只需进行最小的更改-
    足以作为独立的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
    

    它符合沃伦的测试,https://stackoverflow.com/a/38426572/901925



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看