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

多分布循环蒙特卡洛模拟:泊松计数驱动的均匀随机数数组填充问题

解决方案:基于Numpy实现随机数填充NaN数组

步骤1:初始化基础数据

先把给定的事件数数组和目标NaN数组用Numpy定义好:

import numpy as np

# 5×3的A/B/C类事件数数组(每行对应一次运行)
event_counts = np.array([
    [1, 1, 2],
    [1, 2, 2],
    [2, 1, 4],
    [1, 2, 3],
    [0, 1, 2]
])

# 初始化5行10列的NaN数组
nan_array = np.full((5, 10), np.nan)

步骤2:定义类别对应的数值区间

明确A、B、C三类随机数的生成范围:

# 各类别对应的数值区间(左闭右闭)
category_ranges = {
    'A': (1, 100),
    'B': (101, 200),
    'C': (201, 300)
}

步骤3:遍历生成随机数并填充

逐行处理,根据事件数生成对应区间的随机数,再替换NaN数组的对应位置:

for row_idx in range(event_counts.shape[0]):
    a_cnt, b_cnt, c_cnt = event_counts[row_idx]
    
    # 生成各类别对应的整数随机数
    a_nums = np.random.randint(*category_ranges['A'], size=a_cnt)
    b_nums = np.random.randint(*category_ranges['B'], size=b_cnt)
    c_nums = np.random.randint(*category_ranges['C'], size=c_cnt)
    
    # 拼接所有随机数
    combined_nums = np.concatenate([a_nums, b_nums, c_nums])
    
    # 填充到NaN数组的对应行,替换前N个NaN(N为该行事件总数)
    nan_array[row_idx, :len(combined_nums)] = combined_nums

验证输出

打印最终的NaN数组,会看到每行前N个位置被随机数填充,剩余位置保持NaN(示例输出,随机数每次运行不同):

print(nan_array)

输出示例:

[[ 42. 135. 271. 219.  nan  nan  nan  nan  nan  nan]
 [ 18. 162. 194. 227. 263.  nan  nan  nan  nan  nan]
 [  9.  83. 117. 205. 249. 272. 295.  nan  nan  nan]
 [ 51. 123. 181. 208. 259. 284.  nan  nan  nan  nan]
 [141. 230. 268.  nan  nan  nan  nan  nan  nan  nan]]

补充说明

  • 如果需要生成浮点数随机数,把np.random.randint替换为np.random.uniform即可
  • 由于每行最大事件数为7(第三行2+1+4),小于NaN数组的10列长度,不会出现索引越界问题

内容的提问来源于stack exchange,提问作者Tim Starr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:46:16