我有一组字符串,每个字符串有几百万个字符。我想将它们拆分为随机长度的子字符串,而我可以做到这一点而没有任何特殊问题。
但是,我的问题是:如何对子串长度选择施加某种权重?我的代码在python3
中运行,因此我想找到一个pythonic解决方案。详细地说,我的目的是:
感谢您的帮助!
答案 0 :(得分:2)
NumPy
提供了许多random采样功能。浏览各种可用的distributions。
如果您正在寻找权重偏低的东西,也许exponential distribution会起作用吗?
使用matplotlib
可以绘制值的直方图,因此,如果分布符合您的要求,您将可以更好地了解。
是这样的:
import numpy as np
import matplotlib.pyplot as plt
# desired range of values
mn = 1e04
mx = 8e06
# random values following exp distribution
values = np.random.exponential(scale=1, size=2000)
# scale the values to the desired range
values = ((mx-mn)*values/np.max(values)) + mn
# plot the distribution of values
plt.hist(values)
plt.grid()
plt.show()
plt.close()
答案 1 :(得分:1)
可能有很多方法可以做到这一点。我将按照以下步骤进行操作:
rand
中获取一个随机数[0,1]
:
import random
rand = random.random()
[0,1]
的范围内。您使用哪种操作取决于您希望似然分布的样子。一个简单的选择是广场。
rand = rand**2
[0,1]
扩展到[1e04, 8e06]
,并舍入到下一个整数:
subStringLen = round(rand*(8e06-1e04)+1e04)
subStringLen
的子字符串,并检查剩余的字符数。
8e06
个字符,请转到步骤1。1e04
和8e06
之间,请使用它们作为最后一个子字符串。1e04
,则需要决定是否要丢弃其余部分,或者在这种特殊情况下允许小于1e04
的子字符串。我确信在效率方面可以进行很多改进,这只是让您对我的方法有所了解。