我有要从其建立八度音阶的音量数据: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。
为什么是这样?有解决方案吗?

最佳答案

有关为什么np.power不处理负整数的解释,请参见this answer

一种解决方案是使用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

10-06 01:15