如何仅反转numpy矩阵中的负元素?

时间:2018-09-21 12:09:54

标签: python arrays numpy

我有一个包含正负数字的矩阵,如下所示:

>>> source_matrix
    array([[-4, -2,  0],
           [-5,  0,  4],
           [ 0,  6,  5]])

我想得到这个矩阵的副本,其中包含负的负数:

>>> result
    array([[-0.25, -0.5,  0],
           [-0.2,  0,  4],
           [ 0,  6,  5]])

2 个答案:

答案 0 :(得分:2)

首先,由于所需的数组将包含浮点类型,因此需要在创建时将数组的dtype确定为float。这样做的原因是,如果您分配了反向子数组的float结果,它们将自动转换为float。其次,您需要在数组中找到负数,然后使用简单的索引来获取它们并使用np.true_divide()进行求逆。

In [25]: arr = np.array([[-4, -2,  0],
    ...:                 [-5,  0,  4],
    ...:                 [ 0,  6,  5]], dtype=np.float)
    ...:            
    ...:            

In [26]: mask = arr < 0

In [27]: arr[mask] = np.true_divide(1, arr[mask])

In [28]: arr
Out[28]: 
array([[-0.25, -0.5 ,  0.  ],
       [-0.2 ,  0.  ,  4.  ],
       [ 0.  ,  6.  ,  5.  ]])

答案 1 :(得分:1)

您还可以通过使用where的{​​{1}}和out参数来实现,而无需掩盖。

true_divide

给出结果:

a = np.array([[-4, -2,  0],
              [-5,  0,  4],
              [ 0,  6,  5]], dtype=np.float)

np.true_divide(1, a, out=a, where=a<0)

array([[-0.25, -0.5 , 0. ], [-0.2 , 0. , 4. ], [ 0. , 6. , 5. ]]) 参数传递给一个尺寸与您的两个输入相同的数组。如果此结果的值为where=,则执行除法。如果计算结果为True,则将通过False传递的原始输入原样输出到结果中。