我想在numpy数组中取每个值的平方根,同时保留值的符号(并且在负数时不返回复数) - 带符号的平方根。
下面的代码演示了列表所需的功能,但没有利用numpy优化的数组操作超级大国。
def signed_sqrt(list):
new_list = []
for v in arr:
sign = 1
if v < 0:
sign = -1
sqrt = cmath.sqrt(abs(v))
new_v = sqrt * sign
new_list.append(new_v)
list = [1., 81., -7., 4., -16.]
list = signed_sqrt(list)
# [1., 9., -2.6457, 2. -4.]
在某些情况下,我正在计算[数千]图像比较的Hellinger内核。
用numpy做任何顺利的方法吗?感谢。
答案 0 :(得分:13)
您可以尝试使用numpy.sign
函数捕获符号,只需取绝对值的平方根。
import numpy as np
x = np.array([-1, 1, 100, 16, -100, -16])
y = np.sqrt(np.abs(x)) * np.sign(x)
# [-1, 1, 10, 4, -10, -4]