numpy数组中所有值的平方根,保留符号

时间:2015-07-07 23:21:40

标签: python arrays numpy

我想在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做任何顺利的方法吗?感谢。

1 个答案:

答案 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]