2024-04-26 04:17:15 发布
网友
假设我有3个不同的项目是A、B和C。我想创建一个组合列表,包含NA个A副本,NB个B副本和NC个C副本,按随机顺序排列。因此,结果应该如下所示:
A
B
C
NA
NB
NC
finalList = [A, C, A, A, B, C, A, C,...]
用np.random.randPythonically有没有一个干净的方法来解决这个问题?如果没有,除了numpy还有其他包吗?你知道吗
np.random.rand
numpy
可以定义元组列表。每个元组应该包含一个字符和所需的频率。然后您可以创建一个列表,其中每个元素都以指定的频率重复,最后使用random.shuffle对其进行洗牌
random.shuffle
>>> import random >>> l = [('A',3),('B',5),('C',10)] >>> a = [val for val, freq in l for i in range(freq)] >>> random.shuffle(a) >>> ['A', 'B', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A', 'C', 'B', 'C']
我觉得你不需要numpy。您可以使用random内置包:
random
import random na = nb = nc = 5 l = ['A'] * na + ['B'] *nb + ['C'] * nc random.shuffle(l)
列表l将类似于:
l
['A', 'C', 'A', 'B', 'C', 'A', 'C', 'B', 'B', 'B', 'A', 'C', 'B', 'C', 'A']
是的,这是非常有可能的(和简单的)与numpy。您必须创建一个具有唯一元素的数组,使用np.repeat(使用axis参数使这成为可能)将每个元素重复指定的次数,然后使用np.random.shuffle洗牌。你知道吗
np.repeat
axis
np.random.shuffle
这里有一个例子,NA作为1,NB作为2,NC作为3。你知道吗
1
2
3
a = np.array([['A', 'B', 'C']]).repeat([1, 2, 3], axis=1).squeeze() np.random.shuffle(a)
print(a) array(['B', 'C', 'A', 'C', 'B', 'C'], dtype='<U1')
请注意,使用numpy(指定唯一元素和重复的数组)比使用纯python实现(当有大量唯一元素要重复时)更简单。你知道吗
可以定义元组列表。每个元组应该包含一个字符和所需的频率。然后您可以创建一个列表,其中每个元素都以指定的频率重复,最后使用
random.shuffle
对其进行洗牌我觉得你不需要numpy。您可以使用
random
内置包:列表
l
将类似于:是的,这是非常有可能的(和简单的)与numpy。您必须创建一个具有唯一元素的数组,使用
np.repeat
(使用axis
参数使这成为可能)将每个元素重复指定的次数,然后使用np.random.shuffle
洗牌。你知道吗这里有一个例子,
NA
作为1
,NB
作为2
,NC
作为3
。你知道吗请注意,使用numpy(指定唯一元素和重复的数组)比使用纯python实现(当有大量唯一元素要重复时)更简单。你知道吗
相关问题 更多 >
编程相关推荐