我有体积数据,我想从中建立一个八度音阶: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。 为什么是这样?有解决方案吗?
答案 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