如何在numpy中随机生成非负正交矩阵?

时间:2015-10-07 22:16:01

标签: numpy matrix

是否有任何函数可以在numpy或其他python库中随机生成非负正交矩阵?这里的非负意味着该正交矩阵中的所有元素都必须是非负的。

1 个答案:

答案 0 :(得分:2)

如果给定R ^(nxn)中的非负正交矩阵A,那么A就是其中之一,这不是真的! n阶排列矩阵(source)?如果是这样,那么您的任务将简化为仅计算随机排列矩阵。这很简单:

In [1]: import numpy as np
In [2]: def rand_perm_mat(N):
            I = np.eye(N)
            p = np.random.permutation(np.arange(N))
            return I[p]
In [3]: A = rand_perm_mat(5)
In [4]: A
Out[4]: 
array([[ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 1.,  0.,  0.,  0.,  0.]])
In [5]: A.dot(A.T)
Out[5]: 
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])