【问题标题】:Replace all elements of a matrix by their inverses用逆矩阵替换矩阵的所有元素
【发布时间】:2016-11-13 12:27:07
【问题描述】:

我有一个简单的问题,我不知道如何解决。

这是一个矩阵:A = np.array([[1,0,3],[0,7,9],[0,0,8]])

我想找到一种快速的方法,用它们的逆矩阵替换这个矩阵的所有元素,当然不包括零元素。

感谢 Stackoverflow 的搜索引擎,我知道如何将元素替换为具有条件的给定值。相反,我不知道如何根据以前的元素(例如平方元素、逆元素等)用新元素替换元素

【问题讨论】:

    标签: python python-2.7 numpy matrix


    【解决方案1】:

    使用1. / A(注意 Python 2 的点):

    >>> A
    array([[1, 0, 3],
           [0, 7, 9],
           [0, 0, 8]], dtype)
    >>> 1./A
    array([[ 1.        ,         inf,  0.33333333],
           [        inf,  0.14285714,  0.11111111],
           [        inf,         inf,  0.125     ]])
    

    或者,如果您的数组具有 dtype 浮点数,您可以就地执行它而不会发出警告:

    >>> A = np.array([[1,0,3], [0,7,9], [0,0,8]], dtype=np.float64)
    >>> A[A != 0] = 1. / A[A != 0]
    >>> A
    array([[ 1.        ,  0.        ,  0.33333333],
           [ 0.        ,  0.14285714,  0.11111111],
           [ 0.        ,  0.        ,  0.125     ]])
    

    这里我们使用A != 0 仅选择那些非零元素。

    但是,如果您在原始阵列上尝试此操作,您会看到

    array([[1, 0, 0],
           [0, 0, 0],
           [0, 0, 0]])
    

    因为您的数组只能保存整数,而所有其他数组的倒数将被舍入为 0。


    通常,数组上的所有 numpy 东西都会进行元素方向的矢量化转换,以便对元素进行平方,

    >>> A = np.array([[1,0,3],[0,7,9],[0,0,8]]) 
    >>> A * A
    array([[ 1,  0,  9],
           [ 0, 49, 81],
           [ 0,  0, 64]])
    

    【讨论】:

      【解决方案2】:

      只是关于 Antti Haapala 的回答的注释,(抱歉,我还不能评论) 如果你想保留 0,你可以使用

      B=1./A #I use the 1. to make sure it uses floats
      B[B==np.inf]=0
      

      【讨论】:

        猜你喜欢
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-10
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        相关资源
        最近更新 更多