我有要从其建立八度音阶的音量数据: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