2012-03-27 139 views
3

Python中的标准电源操作(**)不适用于负功率!当然,我可以用分而治之的方式写出这个公式。但是,我正在检查优化例程的结果,有时功率是负值,有时是正值。这里再次if语句可以做,但我想知道是否有一个workarouns和一个Python库,允许负面公开。 感谢和问候。使用NumPy数组操作数的负指数

+0

你的问题不适合我的代码工作:http://ideone.com/MO6EJ我不熟悉_exposant_的概念,但就_exponents_而言,它们是完全有效的。例如。 '2 **(-2)'会给你'0.25'。 – Tadeck 2012-03-27 10:41:48

回答

3

你正在使用哪个版本的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

也许使用与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]]) 
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]]) 
3

这可能是一个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 

奇怪的是,它工作在基础蟒蛇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 
+0

奇怪...我认为这个ValueError出现在Python 3.5开始。在使用Python 3.4.3进行尝试时,我没有任何问题。不过,我无法在[python 3.5 changelog](https://docs.python.org/3/whatsnew/3.5.html)中找到任何关于此的信息。 – Praveen 2017-03-14 06:24:23