gpt4 book ai didi

python:通过从列表中排除特定值来创建随机值

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:05 24 4
gpt4 key购买 nike

假设我有以下数据:

data = [1,1,3,2,4]
max_value = 4 # it is known from before
number_of_random_values = 2

我想要的是为 data 的每个点创建范围在 1 到 4 之间的随机值,但不包括每个案例的点的情况。为了更清楚这里是一个例子:

data point    random_values
1 -> [2,4]
1 -> [3,2]
3 -> [1,4]
2 -> [3,1]
4 -> [1,3]

所以我们上面的是:对于每个数据点,两个随机值,这些随机数不能与数据点相同。到目前为止,我所做的如下:

desired_values = np.zeros((len(data), number_of_random_values))
range_of_data = range(1, max_value + 1)
i = 0
for data_point in data:
copy_of_range = copy.copy(range_of_data)
copy_of_range.remove(data_point)
random_values_for_data_point = random.sample(copy_of_range, number_of_random_values)
desired_values[i] = random_values_for_data_point
i = i + 1

上面的代码做了我想要的(numpy 数组中的期望结果)但很明显它没有在性能方面进行优化。

有没有向量化的方法来实现这个?或者更有效的方法?

编辑

替换 数据
data = np.random.random_integers(max_value, size=(1000, 1)).tolist()

并在以下答案的解决方案中运行我的解决方案:

import time
start_time = time.time()
for _ in range(10000):
# each solution
.
.
.
end_time = time.time()
print(end_time - start_time)

我们有以下结果:

  • 我的解决方案:40.3 秒
  • Anton vBR 解决方案:31.7 秒
  • 欲望:261 秒

最佳答案

如果我们不使用 np 作为随机数, 我们可以像这样简单地做一些事情:

import random
import numpy as np

data = [1,1,3,2,4]
max_value = 4 # it is known from before
number_of_random_values = 2

output = [random.sample([i for i in range(1,max_value+1) if i != item],2)\
for item in data]

np.array(output)

返回

array([[4, 2],
[3, 4],
[1, 4],
[1, 3],
[3, 2]])

关于python:通过从列表中排除特定值来创建随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46620680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com