我有一个包含正负数字的矩阵,如下所示:
>>> 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]])
答案 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
传递的原始输入原样输出到结果中。