作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将一个列表拆分为 n 个子列表,其中每个子列表的大小是随机的(至少有一个条目;假设 P>I
)。我使用 numpy.split 函数,它工作正常,但不满足我的随机性条件。您可能会问随机性应该遵循哪种分布。我想,应该没关系。我检查了几篇与我的帖子不同的帖子,因为它们试图分割成几乎相同大小的 block 。如果重复,请告诉我。这是我的方法:
import numpy as np
P = 10
I = 5
mylist = range(1, P + 1)
[list(x) for x in np.split(np.array(mylist), I)]
当P
不能被I
整除时,这种方法就失效了。此外,它创建相同大小的 block ,而不是概率大小的 block 。另一个限制:我不想使用random
包,但我对numpy
没问题。别问我为什么;我希望我对此有一个合乎逻辑的回应。
根据疯狂科学家提供的答案,这是我尝试过的代码:
P = 10
I = 5
data = np.arange(P) + 1
indices = np.arange(1, P)
np.random.shuffle(indices)
indices = indices[:I - 1]
result = np.split(data, indices)
result
输出:
[array([1, 2]),
array([3, 4, 5, 6]),
array([], dtype=int32),
array([4, 5, 6, 7, 8, 9]),
array([10])]
最佳答案
问题可以重构为从 {1,2,...,P-1}
中选择 I-1
个随机分割点,可以使用以下命令查看stars and bars .
因此可以这样实现:
import numpy as np
split_points = np.random.choice(P - 2, I - 1, replace=False) + 1
split_points.sort()
result = np.split(data, split_points)
关于python - 将列表拆分为 n 个随机大小的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915609/
我是一名优秀的程序员,十分优秀!