如何基于CalcspeedAngle函数生成含均值的m1list与m2list?
解决CalcspeedAngle函数的均值列表生成问题
首先先回顾一下你已经写好的函数和调用逻辑:
def CalcspeedAngle(k): xpos = [1,2,3,4,5,6,7,8,9] ypos = [10,11,12,13,14,15,16,17,18] turnrates = [entry/3.099 for entry in xpos][::k] vts = [entry/3.099 for entry in ypos][::k] return(turnrates, vts) # 原调用方式 turnrates, vts = CalcspeedAngle(k)
要生成对应指定k值的均值列表m1list和m2list,你可以通过遍历所有目标k值,逐个计算均值并收集结果的方式实现,下面是两种可行的方案:
方案1:使用numpy简化均值计算
如果你已经安装了numpy(数据分析常用库),可以直接用np.mean()快速计算列表均值,代码如下:
import numpy as np def CalcspeedAngle(k): xpos = [1,2,3,4,5,6,7,8,9] ypos = [10,11,12,13,14,15,16,17,18] turnrates = [entry/3.099 for entry in xpos][::k] vts = [entry/3.099 for entry in ypos][::k] return(turnrates, vts) # 定义所有需要测试的k值 target_ks = [1,2,3,4,5,6,7,8,9,10,15,20] # 初始化结果列表 m1list = [] m2list = [] # 遍历每个k值计算均值 for k in target_ks: current_tr, current_vt = CalcspeedAngle(k) m1list.append(np.mean(current_tr)) m2list.append(np.mean(current_vt)) # 输出结果 print("m1list:", m1list) print("m2list:", m2list)
方案2:纯Python内置函数实现(无需额外库)
如果不想依赖第三方库,用Python内置的sum()和len()也能完成均值计算,还可以处理极端情况(比如空列表,不过你的场景里k≥1,原列表长度为9,k>9时切片至少会保留第一个元素,所以不会出现空列表):
def CalcspeedAngle(k): xpos = [1,2,3,4,5,6,7,8,9] ypos = [10,11,12,13,14,15,16,17,18] turnrates = [entry/3.099 for entry in xpos][::k] vts = [entry/3.099 for entry in ypos][::k] return(turnrates, vts) target_ks = [1,2,3,4,5,6,7,8,9,10,15,20] m1list = [] m2list = [] for k in target_ks: current_tr, current_vt = CalcspeedAngle(k) # 计算均值,这里加了空列表判断(可选,你的场景里用不上,但更健壮) mean_tr = sum(current_tr) / len(current_tr) if current_tr else 0.0 mean_vt = sum(current_vt) / len(current_vt) if current_vt else 0.0 m1list.append(mean_tr) m2list.append(mean_vt) print("m1list:", m1list) print("m2list:", m2list)
补充说明
当k值大于原列表长度(比如k=10、15、20)时,[::k]的切片操作只会返回列表的第一个元素(因为步长超过了列表的索引范围),这时候均值就是该元素除以3.099的值,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Iwan Phillips
相关产品推荐
相关产品推荐

