【问题标题】:How to randomly generate a nonnegative orthogonal matrix in numpy?如何在numpy中随机生成一个非负正交矩阵?
【发布时间】:2015-10-09 02:31:04
【问题描述】:

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

【问题讨论】:

    标签: numpy matrix


    【解决方案1】:

    如果给定 R^(nxn) 中的非负正交矩阵,A,那么 A 不是 n! 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.]])
    

    【讨论】:

    • 谢谢!您所说的是生成一个只有 0 或 1 作为条目的正交矩阵。但是如果条目是非负实数呢?
    • 通过我的答案中链接的帖子,我认为如果正交矩阵具有所有非负值,则可以证明它是二元正交矩阵。编辑:考虑 2D/3D 情况,SO(2) 或 SO(3) 的唯一非负元素是二进制(0 和 1)。一旦任何元素是非二元的,那么矩阵就有负元素。
    • 还有一个问题,如果矩阵A不是方阵,如何生成?
    • @Isaiah 你的问题到底是什么?如何生成半正交矩阵?
    • 让我正式解释一下。我需要一个随机生成的矩阵 A(N*M 和 N > M),使得 A^T * A = I 和 A >= 0。这清楚吗?
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    相关资源
    最近更新 更多