带有NumPy数组操作数的负指数

时间:2012-03-27 10:16:31

标签: python math numpy scipy

Python中的标准电源操作(**)不适用于负电源!当然,我可以用其他方式编写公式,除以正和幂。但是,我正在检查优化常规结果,有时功率是负的,有时它是正的。这里再一次if语句可以做,但我想知道是否有一个workarouns和一个允许负曝光的Python库。 谢谢和问候。

5 个答案:

答案 0 :(得分:5)

您使用的是哪个版本的python?在Python 2.6,2.7和3.2中完美适用于我:

>>> 3**-3 == 1.0/3**3
True

和numpy 1.6.1:

>>> import numpy as np
>>> arr = np.array([1,2,3,4,5], dtype='float32')
>>> arr**-3 == 1/arr**3
array([ True,  True,  True,  True,  True], dtype=bool)

答案 1 :(得分:4)

这可能是Python 3的事情,因为我使用的是3.5.1,我相信这是你的错误......

for c in np.arange(-5, 5):
    print(10 ** c)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-79-7232b8da64c7> in <module>()
      1 for c in np.arange(-5, 5):
----> 2     print(10 ** c)

ValueError: Integers to negative integer powers are not allowed.

只需将其更改为浮动状态即可。

for c in np.arange(-5, 5):
    print(10 ** float(c))

1e-05
0.0001
0.001
0.01
0.1
1.0
10.0
100.0
1000.0
10000.0
奇怪的是,它适用于基础python 3:

for i in range(-5, 5):
    print(10 ** i)

1e-05
0.0001
0.001
0.01
0.1
1
10
100
1000
10000

它似乎适用于Python 2.7.12:

Python 2.7.12 (default, Oct 11 2016, 05:24:00) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> for c in np.arange(-5, 5):
...     print(10 ** c)
... 
1e-05
0.0001
0.001
0.01
0.1
1
10
100
1000
10000

答案 2 :(得分:1)

也许使用内置的NumPy / SciPy, 电源

>>> import numpy as NP
>>> A = 10*NP.random.rand(12).reshape(4, 3)
>>> A
 array([[ 5.7 ,  5.05,  7.28],
        [ 3.61,  9.67,  6.27],
        [ 5.29,  2.8 ,  0.58],
        [ 5.94,  4.9 ,  1.68]])

>>> NP.power(A, -2)
  array([[ 0.03,  0.04,  0.02],
         [ 0.08,  0.01,  0.03],
         [ 0.04,  0.13,  2.98],
         [ 0.03,  0.04,  0.35]])

答案 3 :(得分:0)

我以为我遇到了同样的事情,但我意识到我没有强迫数组成为浮点数。有一次,我做了,它表现得像我预期的那样。你有可能做类似的事吗?

>>> import numpy as np
>>> arr = np.array([[1,2,3,4],[8,9,10,11]])
>>> arr
 array([[ 1,  2,  3,  4],
        [ 8,  9, 10, 11]])

>>> arr ** -1
 array([[1, 0, 0, 0],
        [0, 0, 0, 0]])

>>> arr ** -1.0
 array([[ 1.        ,  0.5       ,  0.33333333,  0.25      ],
        [ 0.125     ,  0.11111111,  0.1       ,  0.09090909]])

答案 4 :(得分:0)

我在Python 2.7中遇到了同样的问题,最终将exponents映射到float。但不能说这是最好的解决方案。

np.power(10, map(lambda n: float(n), np.arange(-5, 6)))