在python中使用类似Zipf的选择从列表中选择元素
是否可以在Zipf发行版之后使用python从列表中选择一个元素 假设我有一个列表:在python中使用类似Zipf的选择从列表中选择元素,python,list,numpy,distribution,Python,List,Numpy,Distribution,是否可以在Zipf发行版之后使用python从列表中选择一个元素 假设我有一个列表: objlist = ['Here', 'in', 'the', 'wall', 'why'] 到目前为止,我已经看到了 但我想不出解决办法 提前感谢。只需使用numpy.random.zipf(shape\u参数)的输出作为列表的索引即可。但是,存在一个问题,即zipf分布是未绑定的,并且该值可能大于您的索引。因此,请将其插入块中,并尝试:除了:块。 当您多次运行代码时,将从列表中绘制不同的值。但是,由于zi
objlist = ['Here', 'in', 'the', 'wall', 'why']
到目前为止,我已经看到了
但我想不出解决办法
提前感谢。只需使用
numpy.random.zipf(shape\u参数)
的输出作为列表的索引即可。但是,存在一个问题,即zipf分布是未绑定的,并且该值可能大于您的索引。因此,请将其插入块中,并尝试:
除了:
块。当您多次运行代码时,将从列表中绘制不同的值。但是,由于zipf分布是未绑定的,而您的列表索引不是,因此它不会完全是zipf分布的 Saple代码:
objlist = ['Here', 'in', 'the', 'wall', 'why']
index = np.random.zipf([1.2, 1.2])
for idx in index:
if idx < len(objlist):
print(objlist[idx])
else:
print "Index {} exceed list".format(idx)
objlist=['Here','in','the','wall','why']
index=np.random.zipf([1.2,1.2])
对于索引中的idx:
如果idx
只需使用
numpy.random.zipf(shape\u参数)
的输出作为列表的索引即可。但是,存在一个问题,即zipf分布是未绑定的,并且该值可能大于您的索引。因此,请将其插入块中,并尝试:
除了:
块。当您多次运行代码时,将从列表中绘制不同的值。但是,由于zipf分布是未绑定的,而您的列表索引不是,因此它不会完全是zipf分布的 Saple代码:
objlist = ['Here', 'in', 'the', 'wall', 'why']
index = np.random.zipf([1.2, 1.2])
for idx in index:
if idx < len(objlist):
print(objlist[idx])
else:
print "Index {} exceed list".format(idx)
objlist=['Here','in','the','wall','why']
index=np.random.zipf([1.2,1.2])
对于索引中的idx:
如果idx
我希望我没有误解你的要求,这是我的代码:
import random
objlist = ['Here', 'in', 'the', 'wall', 'why']
print random.choice(objlist)
我希望我没有误解你的要求,以下是我的代码:
import random
objlist = ['Here', 'in', 'the', 'wall', 'why']
print random.choice(objlist)
要根据实际的经验Zipf分布进行选择,首先需要一个英语单词频率表。如果最频繁的10万次就可以了,你可以得到一次 这是一个pdf文件,文本更容易处理,所以在linux上可以进行转换 pdftotext.pdf 这将创建一个文本文件freq100000.txt,可与以下小脚本一起使用
import re
import numpy as np
record = re.compile('[0-9]+ [0-9]+ [a-z]+')
data = {}
for line in open('freq100000.txt'):
m = record.match(line.strip())
if not m is None:
rank, freq, word = m.group(0).split()
data[word] = int(rank), int(freq)
def rel_freqs(wlist):
freqs = np.array([data[word.lower()][1] for word in wlist])
ps = np.add.accumulate(freqs)
choice = np.searchsorted(ps, np.random.randint(ps[-1]))
return choice
rel_freqs(['Here', 'in', 'the', 'wall', 'why'])
函数
rel_freqs
从列表中随机选择一个单词并返回其索引。绘制单词的概率与其在英语中出现的频率成正比。要根据实际的经验Zipf分布进行选择,首先需要一个英语单词频率表。如果最频繁的10万次就可以了,你可以得到一次
这是一个pdf文件,文本更容易处理,所以在linux上可以进行转换
pdftotext.pdf
这将创建一个文本文件freq100000.txt,可与以下小脚本一起使用
import re
import numpy as np
record = re.compile('[0-9]+ [0-9]+ [a-z]+')
data = {}
for line in open('freq100000.txt'):
m = record.match(line.strip())
if not m is None:
rank, freq, word = m.group(0).split()
data[word] = int(rank), int(freq)
def rel_freqs(wlist):
freqs = np.array([data[word.lower()][1] for word in wlist])
ps = np.add.accumulate(freqs)
choice = np.searchsorted(ps, np.random.randint(ps[-1]))
return choice
rel_freqs(['Here', 'in', 'the', 'wall', 'why'])
函数
rel_freqs
从列表中随机选择一个单词并返回其索引。画一个单词的概率与它在英语中出现的频率成正比。Hhm有趣的建议。ti是否可以设置一个代码示例?这对我来说有点棘手,因为我无法理解其分布。非常有用。最后一个问题。如果我想根据此选择2个值,如何实现此目标?请接受答案,如果您喜欢,请向上投票。这至少是对你没有付钱的工作的某种奖励;)我有个有趣的建议。ti是否可以设置一个代码示例?这对我来说有点棘手,因为我无法理解其分布。非常有用。最后一个问题。如果我想根据此选择2个值,如何实现此目标?请接受答案,如果您喜欢,请向上投票。这至少是对你没有付钱的工作的某种奖励;)这只是随机选择值。我想在选择中遵循zips分布。这只是随机选择值。我想在选择中遵循zips分布。你是指这些单词在英语中的实际频率吗?是的。我想根据zipfs分布选择元素。如果我理解你的问题,你的意思是这些单词在英语中的实际频率吗?是的。我想根据zipfs分布选择元素。如果我理解你的问题好的,我理解你的观点,谢谢你。但我是发行版的新手,我对这个例子感到困惑。我想把这句话改编成我的单子,但这很难,让我们一步一步来尝试:你下载字典成功了吗?(2) 将其转换为文本?(3) 运行脚本?-我将添加一行显示函数调用。好的,我理解你的观点,谢谢。但我是发行版的新手,我对这个例子感到困惑。我想把这句话改编成我的单子,但这很难,让我们一步一步来尝试:你下载字典成功了吗?(2) 将其转换为文本?(3) 运行脚本?-我将添加一行显示函数调用。