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

如何在numpy中随机生成非负正交矩阵?,numpy,matrix,Numpy,Matrix,在numpy或其他python库中是否有任何函数可以随机生成非负正交矩阵?这里的非负性意味着正交矩阵中的所有元素都必须是非负的。在R^(nxn),a中给定一个非负正交矩阵,那么a是n中的一个,这不是真的吗!n阶置换矩阵()?如果是这样,那么您的任务就简化为只计算一个随机排列矩阵。这很简单: In [1]: import numpy as np In [2]: def rand_perm_mat(N): I = np.eye(N) p = np.ra

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

在R^(nxn),
a
中给定一个非负正交矩阵,那么
a
是n中的一个,这不是真的吗!n阶置换矩阵()?如果是这样,那么您的任务就简化为只计算一个随机排列矩阵。这很简单:

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.]])

谢谢您所说的是生成一个只有0或1作为条目的正交矩阵。但是如果条目是非负实数呢?通过我答案中的链接,我认为如果一个正交矩阵有所有的非负值,那么可以证明它是一个二元正交矩阵。编辑:考虑2D/3D情况,SO(2)或SO(3)的唯一非负元素是二进制(0和1)。一旦任何元素是非二进制的,那么矩阵就有负元素。还有一个问题,如果矩阵A不是正方形,我怎么能生成一个呢?@Isaiah你的问题是什么?如何生成半正交矩阵?让我用一种正式的方式来解释。我需要一个随机生成的矩阵a(N*M和N>M),使得a^T*a=I和a>=0。清楚了吗?