Numpy power 不允许负值

Numpy power does not allow negative values

我有体积数据,我想从中构建八度音阶:2^n : 1,2,4,8,16,32,64...etc n = 0,1,2,3, 4,5,6...

卷数据:

Biovolume (µm³)   
0.238873
1.05251
2.82718

我的代码是:

import pandas as pd
import numpy as np

#data file
data = pd.read_csv("data.csv")

#define and sort biovolume
Biovolume = data['Biovolume'].as_matrix()
Biovolume = np.sort(Biovolume)

#octave scale:
min_scale = np.floor(np.log2(np.min(Biovolume))).astype('int')
max_scale = np.ceil(np.log2(np.max(Biovolume))).astype('int')

体积数据的比例最小为-3,最大为2。 下一步是实际构建数据的八度音阶:

octave_scale = np.power(2, range(min_scale, max_scale+1))

但是,我收到此错误: ValueError:不允许整数到负整数的幂。

我想这意味着不可能执行 2^-3、2^-2 和 2^-1。 为什么是这样?有解决办法吗?

请参阅 this answer 了解为什么 np.power 不处理负整数的解释。

一种解决方案是使用 np.float_power,它是专门为处理负幂而设计的。来自 docs:

The intent is that the function will return a usable result for negative powers and seldom overflow for positive powers.

示例:

>>> np.power(5,-2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Integers to negative integer powers are not allowed.
>>> np.float_power(5, -2)
0.040000000000000001