用反转替换矩阵的所有元素

时间:2016-07-11 14:03:01

标签: python python-2.7 numpy matrix

我遇到了一个简单的问题,我无法弄清楚如何解决它。

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

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

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

2 个答案:

答案 0 :(得分:5)

使用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 float,则可以在没有警告的情况下就地执行:

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

答案 1 :(得分:3)

关于Antti Haapala的回答,(对不起,我还不能发表评论) 如果你想保留0,你可以使用

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