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=
传入的原始输入将输出到结果中,而不作更改