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

Python 如何仅反转numpy矩阵中的负元素?,python,arrays,numpy,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]]) 首先,由于所需数

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

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

首先,由于所需数组将包含浮点类型,因此需要在创建时将数组的
dtype
确定为
float
。原因是,如果指定反转子数组的浮点结果,它们将自动转换为浮点。其次,您需要在数组中找到负数,然后使用简单的索引来获取它们,并使用
np.true\u 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.  ]])
[25]中的
:arr=np.array([[-4,-2,0],
...:                 [-5,  0,  4],
…:[0,6,5]],dtype=np.float)
...:            
...:            
在[26]中:掩码=arr<0
在[27]中:arr[mask]=np.true\u除法(1,arr[mask])
In[28]:arr
出[28]:
数组([-0.25,-0.5,0.],
[-0.2 ,  0.  ,  4.  ],
[ 0.  ,  6.  ,  5.  ]])

首先,由于所需数组将包含浮点类型,因此需要在创建时将数组的
dtype
确定为
float
。原因是,如果指定反转子数组的浮点结果,它们将自动转换为浮点。其次,您需要在数组中找到负数,然后使用简单的索引来获取它们,并使用
np.true\u 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.  ]])
[25]中的
:arr=np.array([[-4,-2,0],
...:                 [-5,  0,  4],
…:[0,6,5]],dtype=np.float)
...:            
...:            
在[26]中:掩码=arr<0
在[27]中:arr[mask]=np.true\u除法(1,arr[mask])
In[28]:arr
出[28]:
数组([-0.25,-0.5,0.],
[-0.2 ,  0.  ,  4.  ],
[ 0.  ,  6.  ,  5.  ]])

您也可以通过使用
true\u divide
where
out
参数来实现这一点,而无需屏蔽

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)

where=
参数被传递一个与两个输入相同维度的数组。如果计算结果为
True
,则执行除法。如果计算结果为
False
,则通过
out=
传入的原始输入将不加更改地输出到结果中。

您也可以通过使用
Where
out
参数
true\u 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)
where=
参数被传递一个与两个输入相同维度的数组。如果计算结果为
True
,则执行除法。如果其计算结果为
False
,则通过
out=
传入的原始输入将输出到结果中,而不作更改