在python中使用类似Zipf的选择从列表中选择元素

在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

是否可以在Zipf发行版之后使用python从列表中选择一个元素

假设我有一个列表:

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) 运行脚本?-我将添加一行显示函数调用。