抛体运动绘图代码中np.append无法将值存入数组问题求助
问题原因
np.append 不会修改输入的原numpy数组,只会返回一个新增元素后的新数组。你当前的代码没有接收这个返回值,所以原来的x_val和y_val永远停留在初始化的状态。
修复方案
方案1:最小改动适配现有逻辑
把循环里的两行append语句改成接收返回值的形式即可:
x_val = np.append(x_val, X) y_val = np.append(y_val, Y)
不过这种写法效率很低:numpy数组是定长结构,每次append都会重新申请整块内存、拷贝原有数据,循环次数多的时候性能损耗非常明显。
方案2:改用Python列表暂存数据(更推荐)
Python列表是变长结构,append操作是O(1)均摊复杂度,最后统一转numpy数组即可,修改步骤如下:
- 把数组初始化部分改写成空列表:
# 替换原有的x_val、y_val初始化代码 x_val = [] y_val = []
- 循环里直接用列表的append方法添加元素:
x_val.append(X) y_val.append(Y)
- 所有计算完成后再转成numpy数组使用:
x_val = np.array(x_val) y_val = np.array(y_val)
额外优化建议
你当前的代码把4组不同初始参数的抛射坐标都存在同一个一维数组里,如果后续需要分别绘制4条轨迹,建议给每组参数单独开辟存储空间,避免数据混杂。
内容的提问来源于stack exchange,提问作者Maher Hussein
相关产品推荐
相关产品推荐

