检查列表是否是对数的
Check if a list is logarithmic
我有一个函数可以绘制倍数图。一个特定图形的 x 轴可以是线性的或对数的。但是,不需要传递一个列表作为参数来指示哪个图是对数的。我更喜欢透明地分析数据。
x_linear = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x_log = [1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8, 1e-9, 1e-10, 1e-11, 1e-12, 1e-13, 1e-14, 1e-15]
像islog(x_linear)
returnsFalse
和islog(x_log)
returnsTrue
.
x 值并不总是完全线性的,也不是对数的。他们可能是:
x1 = [10, 20, 50, 100, 200, 500, 1000, 1200, 1500, 1800, 1900, 2000, 2100, 3000]
x2 = [1, 2, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
x3 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20]
它们是某种指数,但不足以需要对数 x 轴。
r_value
of linregress 函数说明了序列的线性程度。感谢@conditionalMethod 的评论。
from scipy import stats
x_linear = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x_log = [1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8, 1e-9, 1e-10, 1e-11, 1e-12, 1e-13, 1e-14, 1e-15]
x1 = [10, 20, 50, 100, 200, 500, 1000, 1200, 1500, 1800, 1900, 2000, 2100, 3000]
x2 = [1, 2, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
x3 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20]
stats.linregress(x_linear, range(0, len(x_linear))) # rvalue=1.0
stats.linregress(x_log, range(0, len(x_log))) #rvalue=-0.49016926355349816
stats.linregress(x1, range(0, len(x1))) # rvalue=0.9722589459436218
stats.linregress(x2, range(0, len(x2))) # rvalue=0.8358503295705382
stats.linregress(x3, range(0, len(x3))) # rvalue=0.9325110133355075
接近 1 的值更线性。阈值可以很容易地选择。
此外,它可以用来表示级数的对数程度。 (如果系列是上升的或下降的,它必须匹配)。
import numpy as np
stats.linregress(x_log, np.logspace(len(x_log), 1, num=len(x_log))) # rvalue=0.9999999999999999
我有一个函数可以绘制倍数图。一个特定图形的 x 轴可以是线性的或对数的。但是,不需要传递一个列表作为参数来指示哪个图是对数的。我更喜欢透明地分析数据。
x_linear = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x_log = [1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8, 1e-9, 1e-10, 1e-11, 1e-12, 1e-13, 1e-14, 1e-15]
像islog(x_linear)
returnsFalse
和islog(x_log)
returnsTrue
.
x 值并不总是完全线性的,也不是对数的。他们可能是:
x1 = [10, 20, 50, 100, 200, 500, 1000, 1200, 1500, 1800, 1900, 2000, 2100, 3000]
x2 = [1, 2, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
x3 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20]
它们是某种指数,但不足以需要对数 x 轴。
r_value
of linregress 函数说明了序列的线性程度。感谢@conditionalMethod 的评论。
from scipy import stats
x_linear = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x_log = [1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8, 1e-9, 1e-10, 1e-11, 1e-12, 1e-13, 1e-14, 1e-15]
x1 = [10, 20, 50, 100, 200, 500, 1000, 1200, 1500, 1800, 1900, 2000, 2100, 3000]
x2 = [1, 2, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
x3 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20]
stats.linregress(x_linear, range(0, len(x_linear))) # rvalue=1.0
stats.linregress(x_log, range(0, len(x_log))) #rvalue=-0.49016926355349816
stats.linregress(x1, range(0, len(x1))) # rvalue=0.9722589459436218
stats.linregress(x2, range(0, len(x2))) # rvalue=0.8358503295705382
stats.linregress(x3, range(0, len(x3))) # rvalue=0.9325110133355075
接近 1 的值更线性。阈值可以很容易地选择。
此外,它可以用来表示级数的对数程度。 (如果系列是上升的或下降的,它必须匹配)。
import numpy as np
stats.linregress(x_log, np.logspace(len(x_log), 1, num=len(x_log))) # rvalue=0.9999999999999999