目录
离散系数 也叫变异系数
变异系数的意义:
-
小的 CV 值:数据比较集中,变异性小,表示数据大多数值接近均值。
-
大的 CV 值:数据波动性大,表示数据离均值的偏差较大,变异性高。
import numpy as np
# 第一组数据
time_series_data_1 = np.array([1, 2, 3, 4, 5, 5, 7])
mean_1 = np.mean(time_series_data_1)
std_dev_1 = np.std(time_series_data_1)
# 第二组数据
time_series_data_2 = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7])
mean_2 = np.mean(time_series_data_2)
std_dev_2 = np.std(time_series_data_2)
# 计算变异系数 (CV)
cv_1 = std_dev_1 / mean_1
cv_2 = std_dev_2 / mean_2
print(f"第一组数据的变异系数 (CV): {cv_1}")
print(f"第二组数据的变异系数 (CV): {cv_2}")
波动率学习笔记
物理意义:通过速度向量的标准差衡量运动剧烈程度
def spatial_volatility(points, dt=1):
"""计算三维轨迹的速度波动率
:param points: (n,3)数组,空间点序列
:param dt: 时间步长(默认1单位时间)
:return: 速度标准差(波动率)
"""
# 计算速度向量(前向差分)
velocity = np.diff(points, axis=0) / dt # (n-1,3)
# 计算速度模长
speed = np.linalg.norm(velocity, axis=1) # (n-1,)
# 波动率 = 速度的标准差
return np.std(speed)
波动率1维 需要pandas
import numpy as np
import pandas as pd
# 示例数据:假设这是一个股票的价格时间序列
prices = [1, 2, 3, 4, 5, 6, 7]
prices = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7]
# 将价格转换为 Pandas Series
prices_series = pd.Series(prices)
# 计算对数收益率
returns = np.log(prices_series / prices_series.shift(1))
# 计算日波动率:收益率的标准差
volatility = returns.std()
# 输出结果
print(f"波动率: {volatility}")
最后两条数据,波动率减少,但是离散系统增大。
import numpy as np
import pandas as pd
def bodonglv(prices):
prices_series = pd.Series(prices)
returns = np.log(prices_series / prices_series.shift(1))
volatility = returns.std()
return volatility
def bianyi(prices):
mean_2 = np.mean(prices)
std_dev_2 = np.std(prices)
cv_2 = std_dev_2 / mean_2
return cv_2
prices = [0.1,0.2, 0.3, 0.1, 0.4, 0.1, 0.3,0.1]
volatility = bodonglv(prices)
print(f"波动率: {volatility}")
cv_v=bianyi(prices)
# print(f"bianyi:{cv_2},std:{std_dev_2}")
print(f"bianyi:{cv_v}")
prices = [0.1,0.2, 0.3, 0.2, 0.1, 0.2, 0.3,0.1]
volatility = bodonglv(prices)
print(f"波动率: {volatility}")
cv_v=bianyi(prices)
# print(f"bianyi:{cv_2},std:{std_dev_2}")
print(f"bianyi:{cv_v}")
prices = [0.1,0.2, 0.3, 0.2, 0.1, 0.2, 0.3,0.4]
volatility = bodonglv(prices)
print(f"波动率: {volatility}")
cv_v=bianyi(prices)
# print(f"bianyi:{cv_2},std:{std_dev_2}")
print(f"bianyi:{cv_v}")
波动率: 1.1625636872586609
bianyi:0.5590169943749473
波动率: 0.7235921807490139
bianyi:0.41633319989322654
波动率: 0.5389467040537531
bianyi:0.43033148291193524
3d数据离散系数和波动率
lisan.py
import random
import numpy as np
from mayavi import mlab
# 生成或读取3D点序列
def generate_points(n=100,noise_std=0.1):
t = np.linspace(0, 4 * np.pi, n)
x = np.sin(t)
y = np.cos(t)+ np.random.normal(loc=0.0, scale=noise_std, size=n)
z = t
return np.vstack((x, y, z)).T
# 计算相邻点的欧氏距离
def compute_distances(points):
diffs = np.diff(points, axis=0)
dists = np.linalg.norm(diffs, axis=1)
return dists
# 计算离散系数与波动率
def compute_stats(dists):
mean_dist = np.mean(dists)
std_dist = np.std(dists)
cv = std_dist / mean_dist if mean_dist != 0 else 0
volatility = std_dist
return cv, volatility
# Mayavi 可视化路径
def visualize(points, scalars):
x, y, z = points.T
mlab.figure(bgcolor=(1, 1, 1))
mlab.plot3d(x, y, z, scalars, tube_radius=0.02, colormap='jet')
mlab.colorbar(title='Dist Δ', orientation='vertical')
mlab.show()
# 主流程
points = generate_points(n=200)
dists = compute_distances(points)
cv, volatility = compute_stats(dists)
print(f"离散系数 CV: {cv:.4f}")
print(f"波动率 Volatility: {volatility:.4f}")
# 可视化:以每一段距离为 scalar,显示颜色变化
visualize(points[:-1], dists)