假设从集合0、1、2,...,8、9中一次选择一个随机数,然后进行替换。使用10,000个模拟来估计在其中选择三个相同值所需的平均数。一排。
这是我尝试的代码:
import numpy as np
newlist = 0*[0]
ct = 0
set = [0,1,2,3,4,5,6,7,8,9]
random = np.random.choice(set, size=1)
for i in range(10000):
if random == random:
ct +=1
while ct == 3:
newlist.append()
print(random)
答案 0 :(得分:2)
我认为这就是您想要做的。该代码运行测试10000次,当最后三个值相等时,我们将迭代次数附加到结果中,然后继续进行下一个循环:
import numpy as np
from collections import deque
results = []
number_selection = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for _ in range(10000):
_iterations = 1
d = deque(maxlen=3)
while True:
random_value = np.random.choice(number_selection, size=1)
if len(d) == 3 and len(set(d)) == 1: # if last three items added to deque were equal we add the number of iterations to results and break to next loop
results.append(_iterations)
break # break the while loop
_iterations += 1
d.append(random_value.item())
print('Average is: {0}'.format(float(sum(results)) / max(len(results), 1)))
希望这会有所帮助!
答案 1 :(得分:0)
if ($("#formvalidation").length) {
$("#formvalidation").validate({
debug:true,
rules: {
titulo: "required",
funciones: "required",
tipocontrato: "required",
nivelexperiencia: "required",
rangosalario: "required",
},
messages: {
titulo:{
required: "Por favor escribe un título atractivo para tu oferta.",
minlength: "El título es demasiado pequeño. Intenta agregar más detalles para que sea atractivo.",
},
funciones:{
required: "Por favor redacta brevemente las funciones a realizar del candidato.",
minlength: "Este texto es demasiado corto. Intenta agregar más detalles.",
},
tipocontrato:{
required: "Selecciona el tipo de oferta a publicar.",
},
nivelexperiencia:{
required: "Selecciona la experiencia necesaria para aplicar a esta oferta.",
},
rangosalario:{
required: "Selecciona el rango de salario que corresponda a tu oferta.",
},
estadosoferta:{
required: "Selecciona la entidad federativa en donde está ubicada la oferta a publicar.",
},
municipios:{
required: "Selecciona el municipio en donde está ubicada la oferta a publicar.",
},
localidades:{
required: "Selecciona la localidad en donde se ubica la oferta a publicar.",
},
categorias:{
required: "Por favor selecciona la categoría a la que pertenece la oferta a publicar.",
},
subcategorias:{
required: "Por favor selecciona la subcategoria a la que pertenece la oferta a publicar.",
},
contratacion:{
required: "Elige una fecha de contratación aproximada.",
},
},
errorPlacement: function (label, element) {
label.addClass('mt-2 text-danger');
label.insertAfter(element);
},
highlight: function (element, errorClass) {
$(element).parent().addClass('has-danger')
$(element).addClass('form-control-danger')
},
submitHandler: function(form) {
$("#loading").removeClass('d-none');
form.submit();
}
});
};
答案 2 :(得分:0)
怎么样:
opts = list(range(9))
# simulate once
def get_three():
c = 1
x = np.random.choice(opts, 1)
i = 1
while c < 3:
x1 = np.random.choice(opts, 1)
if x == x1:
c += 1
else:
x = x1
c = 1
i += 1
return i
# simulate n times
n = 10000
result = sum([get_three() for i in range(n)]) / n
result # 90.5146
答案 3 :(得分:0)
理论上,假设您的初始列表中有n * 1/n^3
个数字,则期望的期望值为1/n^2
,即n
。
为了模拟它,我将尝试以下操作:
import numpy as np
count = 0
num_iterations = 1000
numbers = [0,1,2,3,4,5,6,7,8,9]
for _ in range(num_iterations):
if len(set(np.random.choice(numbers, 3, replace=True))) == 1:
count += 1
print("Avg is {}".format(count/num_iterations))
由于numpy.choice
会从numbers
中统一选择三个成员,因此三个连续的相同编号的选择的情况等同于基数为1的集合。如果增加{{1} }到大约10000,您会看到它以预期的可接受的精度(平均大约为0.01)模拟情况。