You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在For循环中向Numpy数组追加元素的蒙特卡洛股票模拟问题

问题分析与解决方法

核心问题

你的代码里np.append()没有生效,是因为**np.append()不会原地修改原数组,而是返回一个新数组**,你没有将返回值重新赋值给stock_price_array,所以原数组始终保持初始的空状态。另外,预分配数组的方式也可以优化,直接通过索引赋值更符合Numpy的高效使用习惯。

修正方案

方案1:直接索引赋值(推荐,高效)

预分配数组后,通过索引直接修改数组元素,避免append的低效问题:

import numpy as np

annual_mean = .06
annual_stdev = .15
start_stock_price = 100

numYears = 3
# 单条路径模拟时,年化收益率数量应与年份数匹配
annual_ret = np.random.normal(annual_mean, annual_stdev, numYears)

# 预分配数组存储每年股价
stock_price_array = np.zeros(numYears)
stock_price_array[0] = start_stock_price  # 存入初始股价

# 从第2年开始计算后续股价
for i in range(1, numYears):
    stock_price_array[i] = stock_price_array[i-1] * (1 + annual_ret[i-1])

print(stock_price_array)

方案2:正确使用np.append(不推荐,低效)

如果一定要用append,必须将返回值重新赋值给原数组,且初始数组应为空:

import numpy as np

annual_mean = .06
annual_stdev = .15
start_stock_price = 100

numYears = 3
numSimulations = 4
stock_price_array = np.array([])  # 初始化为空数组
annual_ret = np.random.normal(annual_mean, annual_stdev, numSimulations)

current_price = start_stock_price
stock_price_array = np.append(stock_price_array, current_price)  # 先存入初始股价

for i in range(numYears):
    current_price = current_price * (1 + annual_ret[i])
    stock_price_array = np.append(stock_price_array, current_price)

print(stock_price_array)

扩展:多模拟路径的蒙特卡洛(更实用)

如果要做多次独立模拟(比如4次3年股价预测),推荐用二维数组+向量化操作,效率远高于循环:

import numpy as np

annual_mean = .06
annual_stdev = .15
start_stock_price = 100

numYears = 3
numSimulations = 4

# 二维数组:行=模拟次数,列=年份
stock_price_array = np.zeros((numSimulations, numYears))
stock_price_array[:, 0] = start_stock_price  # 所有模拟的初始股价

# 生成所有模拟的年化收益率(每行对应一次模拟的历年收益率)
annual_ret = np.random.normal(annual_mean, annual_stdev, (numSimulations, numYears-1))

# 向量化计算所有年份的股价
for i in range(1, numYears):
    stock_price_array[:, i] = stock_price_array[:, i-1] * (1 + annual_ret[:, i-1])

print(stock_price_array)

内容的提问来源于stack exchange,提问作者Angelica White

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:15:42