我不明白 from django.urls.conf import path
from . import views
app_name = 'main'
urlpatterns = [
path('', views.hello, name="hello"),
]
的 cum_weights
参数。
我读到它是:
前一个元素的权重+自身权重 [10, 5, 1] → [10, 15, 16]
据我了解,random.choices
的概率是 16,是最高的。那么为什么 "cherry"
的重复性会更高?
"apple"
输出:
import random
mylist = ["apple", "banana", "cherry"]
print(random.choices(mylist, cum_weights=[10, 5, 1], k=9))
答案 0 :(得分:0)
当您有相对权重时,累积权重看起来像这些值的总和:
您的 cum_weights 应该是:[10, 15, 16]
mylist = ["apple", "banana", "cherry"]
print(random.choices(mylist, cum_weights=[10, 15, 16], k=14))
['apple', 'banana', 'cherry', 'banana', 'apple', 'banana', 'apple', 'apple', 'banana', 'banana', 'apple', 'banana', 'banana', 'banana']
答案 1 :(得分:0)
说def read_path():
files = []
suffixes = ('_SUCCESS', 'referen/')
files_path = fs.listdir(f"s3://{path}")
if files_path is not None:
for num, file in enumerate(files_path, start=1):
if not file['Key'].endswith(suffixes):
files.append(file['Key'])
return files
def from_containers(container, path):
containers = []
for num, file in enumerate(read_path(container, path), start=1):
containers.append(client.V1Container(name=f'hcm1-{num}', image='image-python',
command=['python3', 'model.py'],
env=[client.V1EnvVar(name='model', value='hcm1'),
client.V1EnvVar(name='referen', value=f"s3://{file}")]))
template = client.V1PodTemplateSpec(metadata=client.V1ObjectMeta(name="hcm1"),
spec=client.V1PodSpec(restart_policy="OnFailure",
containers=from_containers(containers, path),
image_pull_secrets=[client.V1LocalObjectReference(name="secret")]))
spec = client.V1JobSpec(template=template, backoff_limit=20)
job = client.V1Job(api_version="batch/v1", kind="Job", metadata=client.V1ObjectMeta(name="hcm1"), spec=spec)
api_response = batch_v1.create_namespaced_job(body=job, namespace="default")
print("Job created. status='%s'" % str(api_response.status))
和说weights=[10,5,1]
是一样的。 cum_weights=[10,15,16]
值必须按升序排列才能有意义。你提供的东西会让事情变得混乱。 cum_weights
将使用最大值作为其随机范围,因此在您的情况下,它将选择 0 到 9 之间的数字,并且由于您的前 10 个值是“apple”,因此它始终会选择“apple” ”。
答案 2 :(得分:0)
您混淆了相对权重和累积权重。
随机选择中的 cum_weights=[10, 5, 1]
参数是累积权重本身,不会进一步累积。
答案 3 :(得分:0)
cum_weights
参数不会进一步累积。你可以在这里查看函数的实现https://github.com/python/cpython/blob/3.9/Lib/random.py#L473
看看这行https://github.com/python/cpython/blob/3.9/Lib/random.py#L505
生成输出的位置。在 bisect
方法中,它尝试确定索引 random()*total
在数组 cum_weights
中的位置。在您的情况下,cum_weights
是 [10, 5, 1]
。并查看这一行 https://github.com/python/cpython/blob/3.9/Lib/random.py#L500 以了解如何计算 total
。
total = cum_weights[-1] +0.0
这意味着您的 total
始终为 1.0
,因为 cum_weights
的最后一个值为 1。因此,您始终获得第一个索引,即总体中的 0。所以你的输出将包含所有“苹果”。即使您运行该算法一千次,您当前的实现也只会在我们的输出列表中获得 apple
。