如何在循环中合并列表生成适配高斯绘图的二维数据结构?
问题解决方案
修正代码得到目标二元列表
原代码问题出在循环内分别追加了两个单元素列表,才会出现当前的拆分结构。同时原有代码存在冗余逻辑、函数依赖全局变量的问题,修正后代码如下:
# 先定义高斯参数,这里你可以替换成自己的实际取值 a = 1 mu = 0 sig = 1 Gauss_list = [] # 把z作为参数传入函数,避免依赖全局变量 def GetDepth(z): return float(a * 2.7 - (z - mu)**2 / (2 * sig**2)) # 直接遍历0~200的z值,删掉冗余的自增和无效内层循环 for z in range(0, 201): # 直接将z和对应的高斯值拼成一个列表追加 Gauss_list.append([z, GetDepth(z)]) print(Gauss_list)
运行后就会得到你需要的[[z值, 高斯值], ...]结构。
无需生成二元列表的绘图方案
使用Matplotlib绘图不需要提前拼二元列表,单独生成x轴(z值)和y轴(高斯值)两个一维序列即可直接绘制,甚至可以用numpy向量化运算省略循环,代码更简洁:
import numpy as np import matplotlib.pyplot as plt # 定义高斯参数 a = 1 mu = 0 sig = 1 # 直接生成0~200的z值序列(向量化运算不需要写循环) z_arr = np.arange(0, 201) # 直接计算所有z对应的高斯值 gauss_arr = a * 2.7 - (z_arr - mu)**2 / (2 * sig**2) # 直接绘图,不需要生成二元列表 plt.plot(z_arr, gauss_arr) plt.xlabel('z') plt.ylabel('高斯函数值') plt.show()
这种方案运算效率更高,代码更简洁,也不需要额外处理列表拼接逻辑。
内容的提问来源于stack exchange,提问作者Rus
相关产品推荐
相关产品推荐

