2024-05-17 01:12:59 发布
网友
基本上,我要做的是在保持内部分布的同时从列表中随机选择项目。请参见以下示例。在
a = 17% b = 12% c = 4% etc.
“a”列表中有1700项。 “b”列表中有1200项。 “c”在列表中有400项。在
我需要一个模拟a、b、c等分布的示例,而不是使用所有信息
所以最终的目标是
从“a”中随机选择170个项目 从“b”中随机选择120个项目 从“c”中随机选择40个项目
我知道如何从列表中随机选择信息,但我还没能想出如何在强制结果具有相同分布的情况下随机选择。在
在您的选择中“模拟”这种分布的一种方法是简单地将列表组合成一个,然后从该列表中选择所需的项目总数。如果需要选择的项目总数很大,那么这个近似值就可以了。在
请注意,它并不保证将从每个列表中选择这些数量。但是,如果列表很大,并且这个例程有很多次运行,那么平均值应该是好的。在
import random total = a + b + c + ... samples = [] number = len(total) / 10 for i in range(number): samples.append(total[random.rand(0, len(total) - 1])
如果你的列表不是很庞大,如果内存不是问题,你可以使用这个简单的方法。在
要从a、b和{}中获取{}元素,可以将这三个列表连接在一起,并从结果列表中使用^{}随机选取元素:
a
b
import random n = 50 a = ['a'] * 170 b = ['b'] * 120 c = ['c'] * 40 big_list = a + b + c random_elements = [random.choice(big_list) for i in range(n)] # ['a', 'c', 'a', 'a', 'a', 'b', 'a', 'c', 'b', 'a', 'c', 'a', # 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'a', 'c', 'a', # 'c', 'a', 'b', 'a', 'a', 'c', 'a', 'b', 'a', 'c', 'b', 'a', # 'a', 'b', 'a', 'b', 'a', 'a', 'c', 'a', 'c', 'a', 'b', 'c', # 'b', 'b']
对于每个元素,您将得到一个len(a) / len(a + b + c)概率,从a获得一个元素。在
len(a) / len(a + b + c)
但是,同一个元素可能会多次出现。如果不希望发生这种情况,可以使用^{}。在
根据我的理解,你有三个不同的群体,你想从这些群体中随机抽样,但是选择某些群体的概率有偏差。在这种情况下,首先随机生成与每个总体相对应的索引列表(因为我将它们组合成一个称为combined)的2D数组。在
combined
然后,您可以遍历随机生成的索引列表,该列表提供了要从中选择的总体,然后使用^{}从该数据中随机选取。在
import numpy as np sample_a = np.arange(1, 1000) sample_b = np.arange(1001, 2000) sample_c = np.arange(2001, 3000) combined = np.vstack((sample_a, sample_b, sample_c)) distributions = [0.7, 0.2, 0.1] # The skewed probability distribution for sampling sample = np.random.choice([0, 1, 2], size=10, p=distributions) # Choose indices with skewed probability combined_pool = [] for arr in sample: combined_pool.append(np.random.choice(combined[arr]))
在您的选择中“模拟”这种分布的一种方法是简单地将列表组合成一个,然后从该列表中选择所需的项目总数。如果需要选择的项目总数很大,那么这个近似值就可以了。在
请注意,它并不保证将从每个列表中选择这些数量。但是,如果列表很大,并且这个例程有很多次运行,那么平均值应该是好的。在
如果你的列表不是很庞大,如果内存不是问题,你可以使用这个简单的方法。在
要从}中获取{}元素,可以将这三个列表连接在一起,并从结果列表中使用^{} 随机选取元素:
a
、b
和{对于每个元素,您将得到一个
len(a) / len(a + b + c)
概率,从a
获得一个元素。在但是,同一个元素可能会多次出现。如果不希望发生这种情况,可以使用^{} 。在
根据我的理解,你有三个不同的群体,你想从这些群体中随机抽样,但是选择某些群体的概率有偏差。在这种情况下,首先随机生成与每个总体相对应的索引列表(因为我将它们组合成一个称为
combined
)的2D数组。在然后,您可以遍历随机生成的索引列表,该列表提供了要从中选择的总体,然后使用^{} 从该数据中随机选取。在
相关问题 更多 >
编程相关推荐