【问题标题】:Runtime Warning Using power with Numpy运行时警告在 Numpy 中使用电源
【发布时间】:2014-10-20 20:56:42
【问题描述】:

我正在使用 numpy 的 power 函数,并且收到一条警告消息。这是代码:

import numpy as np


def f(x, n):
    factor = n / (1. + n)
    exponent = 1. + (1. / n)
    f1_x = factor * np.power(0.5, exponent) - np.power(0.5 - x, exponent)
    f2_x = factor * np.power(0.5, exponent) - np.power(x - 0.5, exponent)
    return np.where((0 <= x) & (x <= 0.5), f1_x, f2_x)

fv = np.vectorize(f, otypes='f')
x = np.linspace(0., 1., 20)
print(fv(x, 0.23))

这是警告信息:

E:\ProgramasPython3\LibroCientifico\partesvectorizada.py:8: RuntimeWarning: power f2_x = factor * 中遇到的无效值 np.power(0.5, exponent) - np.power(x - 0.5, exponent) E:\ProgramasPython3\LibroCientifico\partesvectorizada.py:7: RuntimeWarning: power f1_x = factor * 中遇到的无效值 np.power(0.5, exponent) - np.power(0.5 - x, exponent) [-0.0199636 -0.00895462 -0.0023446 0.00136486 0.003271 0.00414007 0.00447386 0.00457215 0.00459036 0.00459162 0.00459162 0.00459036 0.00457215 0.00447386 0.00414007 0.003271 0.00136486 -0.0023446 -0.00895462 -0.0199636]

我不知道什么是无效值。而且我不知道如何指定numpy函数f2_x仅对> 0.5和

【问题讨论】:

  • 对我来说运行良好 - Python 3.4.1、numpy 1.9.0、Win8

标签: python-3.x numpy


【解决方案1】:

发生这种情况的原因是因为您试图取负数的非整数幂。显然,如果您没有明确地将值转换为复杂的,这在早期版本的 Python/Numpy 中不起作用。所以你将不得不做类似的事情

np.power(complex(0.5 - x), exponent).real

编辑:由于您的值将是真正复杂的(不是一些实数 + 一些微小的 imag 部分),我认为您可能希望稍后使用复数(但随后使用 &lt;=) on 有点困难,或者你想以其他方式捕捉基数为负的情况。

【讨论】:

  • +1 或者你可以简单地做x = x.astype(np.complex128)
  • 我已经安装了最新的 numpy,但是添加 real.奇怪的是,我使用的是 Windows 8.1 64 位,Pycharm 检测到我 numpy 0.8,但我已经安装了 Python 3.4.2 64 位的最新版本。谢谢
  • @Tobal 你也加入了complex() 演员表吗?这实际上是重要的部分。如果这不起作用,请尝试@Saullo Castro 的版本。我很确定否定论点是问题所在(我在尝试时遇到了同样的错误)。
【解决方案2】:

好的,非常感谢大家,这是使用分段函数针对 numpy 的哪里的解决方案,并使用提到的 np.complex128 @Saullo

   import numpy as np


    def f(x, n):
        factor = n / (1. + n)
        exponent = (n + 1.) / n
        f1_x = lambda x: factor * \
            np.power(2., -exponent) - np.power((1. - 2. * x) / 2., exponent)
        f2_x = lambda x: factor * \
            np.power(2., -exponent) - np.power(-(1. - 2. * x) / 2., exponent)
        conditions = [(0. <= x) & (x <= 0.5), (0.5 < x) & (x <= 1.)]
        functions = [f1_x, f2_x]
        result = np.piecewise(x, conditions, functions)
        return np.real(result)

    x = np.linspace(0., 1., 20)
    x = x.astype(np.complex128)
    print(f(x, 0.23))

问题是当幂的基数为负时 np.power 无法正常工作并且您会收到警告消息。我希望这对每个人都有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    相关资源
    最近更新 更多