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
我有体积数据,我想从中构建八度音阶: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