如何为对数图创建每十年的点间距

时间:2019-08-01 20:43:18

标签: python numpy math scipy logarithm

简介

我的频率范围从freq_start_hz = Xfreq_stop_hz = Y

我试图根据每个decade[freq_start_hz, freq_stop_hz])(包括端点)的样本数,以对数(以10为底)在num_samp_per_decade范围之间对样本进行间隔。 / p>

我注意到numpy有一种方法logspacelink),该方法使您可以基于总计创建范围从base ** startbase ** stop的对数除法样本数num

您能帮我创建Python代码,以每十年为单位创建对数间距吗?

示例

freq_start_hz = 10freq_stop_hz = 100num_samp_per_decade = 5

这很容易,因为只有十年。因此,可以使用以下命令创建它:

import numpy as np
from math import log10


freq_start_hz = 10
freq_stop_hz = 100
num_samp_per_decade = 5

freq_list = np.logspace(
    start=log10(freq_start_hz), 
    stop=log10(freq_stop_hz), 
    num=num_samp_per_decade, 
    endpoint=False,
    base=10,
)
freq_list = np.append(freq_list, freq_stop_hz)  # Appending end
print(freq_list.tolist())

输出为[10.0, 17.78279410038923, 31.622776601683793, 56.23413251903491, 100.0]

注意:这很好用,因为我是这样设计的。如果为freq_start_hz = 8,则此方法不再有效,因为它已经跨越了数十年。

结论

我希望在某个地方,mathnumpy,另一个scipy库或我尚未进行互联网搜索的其他库中有一个预制的方法。 / p>

1 个答案:

答案 0 :(得分:1)

根据范围内的十年数来计算点数。

from math import log10
import numpy as np

start = 10
end = 1500
samples_per_decade = 5

ndecades = log10(end) - log10(start)
npoints = int(ndecades) * samples_per_decade
#a = np.linspace(log10(start), log10(end), num = npoints)
#points = np.power(10, a)
points = np.logspace(log10(start), log10(end), num=npoints, endpoint=True, base=10)
print(points)