指数分布样本生成与按需调用问题求助
解决按样本量单独调用指数分布样本的问题
嘿,我看你已经搞定了指数分布样本的生成逻辑,现在就差能按样本量直接调用对应的样本对吧?这里有几个实用的方案帮你解决这个问题:
方案1:返回字典(最直观的调用方式)
把原来的列表换成字典,用样本量作为键,对应的样本数组作为值,这样后续想拿哪个样本量的数据,直接用键访问就行,非常直观:
import numpy as np def sampleexp(): samples_dict = {} # 遍历所有需要的样本量,把样本存入字典 for sample_size in range(100, 10100, 100): samples_dict[sample_size] = np.random.exponential(scale=1/1.2, size=sample_size) return samples_dict # 先生成所有样本 all_samples = sampleexp() # 按样本量直接调用:比如获取样本量100的样本 s_100 = all_samples[100] # 获取样本量10000的样本 s_10000 = all_samples[10000]
方案2:基于原列表做映射(不修改原函数)
如果你不想改动原来的函数,也可以在生成样本列表后,创建一个“样本量→列表索引”的映射,或者直接计算索引来获取对应样本:
import numpy as np # 保留你原来的函数 def sampleexp(): samples = [] for i in range(100, 10100, 100): samples.append(np.random.exponential(scale=1/1.2, size=i)) return samples all_samples = sampleexp() ### 方法A:直接计算索引 # 样本量n对应的索引是 (n - 100) // 100 target_size = 500 s_target = all_samples[(target_size - 100) // 100] ### 方法B:创建映射字典(更易读) sample_sizes = list(range(100, 10100, 100)) size_to_index = {size: idx for idx, size in enumerate(sample_sizes)} # 调用样本量300的样本 s_300 = all_samples[size_to_index[300]]
方案3:按需生成单个样本(节省内存)
如果你不需要一次性生成所有100组样本,只是偶尔需要某一个样本量的数据,可以修改函数让它接受样本量参数,直接返回对应样本:
import numpy as np def sampleexp_single(sample_size): return np.random.exponential(scale=1/1.2, size=sample_size) # 获取样本量100的样本 s_100 = sampleexp_single(100) # 获取样本量5000的样本 s_5000 = sampleexp_single(5000)
根据你的需求选就行:如果需要频繁调用不同样本量的已生成数据,方案1最方便;如果想保留原函数逻辑,方案2合适;如果只是按需生成单个样本,方案3更节省内存~
内容的提问来源于stack exchange,提问作者python_infant
相关产品推荐
相关产品推荐

