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

Python中不同种子下正态分布文件命名的均值方差一致性问题

问题:生成固定均值方差的正态分布时文件名数值波动

我需要生成具有固定均值(desired_mean=50.0)、方差(desired_variance=1.5)的截断正态分布,要求每个不同seed生成的文件,文件名里的均值和方差保持一致,但目前每个文件的文件名数值有波动。

实现代码

from scipy.stats import truncnorm
import numpy as np
import os
import csv

Runs = 10
Nodes = 1012
desired_mean = 50.0
desired_variance = 1.5

def function(run):
    parent_folder = str(run + 1)
    os.mkdir(parent_folder)

    np.random.seed(run)  # Set a different seed for each run

    # Generate truncated normal random numbers with specified mean and variance
    lower_bound = desired_mean - 2 * np.sqrt(desired_variance)
    upper_bound = desired_mean + 2 * np.sqrt(desired_variance)
    r = (1e-6) * truncnorm.rvs((lower_bound - desired_mean) / np.sqrt(desired_variance), (upper_bound - desired_mean) / np.sqrt(desired_variance), loc=desired_mean, scale=np.sqrt(desired_variance), size=Nodes)

    sort_r = np.sort(r)
    r1 = sort_r[::-1]

    r1 = r1.reshape(1, Nodes)

    r2 = r.copy()
    np.random.shuffle(r2.ravel()[1:])
    r2 = r2.reshape(1, Nodes)

    maximum = r2.max()
    indice1 = np.where(r2 == maximum)
    r2[indice1] = r2[0][0]
    r2[0][0] = maximum
    r2[0][Nodes-1] = maximum

    mean = np.mean(r)
    var = np.var(r)
    std = np.std(r)

    with open(os.path.join(parent_folder, rf"Inv_Radius_{Nodes}_{round(mean*1e6,1)}_{round(var*1e12,1)}ND.csv"), 'w+') as f:
        np.random.shuffle(r2[0][1:-1])
        inv_r = 1/r2
        writer = csv.writer(f)
        writer.writerows(inv_r)


for x in range(Runs):
    function(x)

当前输出文件名(存在差异)

Inv_Radius_1012_50.0_1.2ND.csv
Inv_Radius_1012_50.0_1.1ND.csv

期望输出文件名(统一格式)

Inv_Radius_1012_50.0_1.1ND.csv

解决方案

问题出在你用生成后样本的实际均值和方差来命名文件,而随机抽样生成的样本统计量必然存在波动,无法和理论设定值完全一致。

只需把文件名中的实际统计量替换为预先设定的目标值,就能让所有文件名保持统一:

修改代码中文件名的生成部分:

# 原代码(使用实际统计量)
rf"Inv_Radius_{Nodes}_{round(mean*1e6,1)}_{round(var*1e12,1)}ND.csv"

# 修改后(使用预设目标值)
rf"Inv_Radius_{Nodes}_{round(desired_mean*1e6,1)}_{round(desired_variance*1e12,1)}ND.csv"

如果你的期望文件名中方差部分是1.1,只需将代码中的desired_variance改为1.1即可,文件名会自动统一为你想要的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:18:04