Numpy power不允许负值

时间:2018-06-12 16:29:40

标签: python numpy negative-number raise

我有体积数据,我想从中建立一个八度音阶:2 ^ n:1,2,4,8,16,32,64 ......等等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。 为什么是这样?有解决方案吗?

1 个答案:

答案 0 :(得分:2)

请参阅this answer,了解np.power无法处理否定整数的原因。

一种解决方案是使用np.float_power,它专门用于处理负面力量。来自docs

  

目的是该函数将返回负功率的可用结果,并且很少为正功率溢出。

示例:

>>> 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