如何在python中轻轻地拖曳列表

数学冷却器

我有一个问题想在这里整理一下列表,但是只做些许。说,我只希望移动少量元素。有没有简单的方法可以做到这一点?

现在,我能想到的最好的方法就是手动构建自己的方法,但是有什么方法可以使用该random库为我做到这一点?

山姆·梅森

展示其中一些解决方案的工作方式,我发现它有助于多次运行蒙特卡洛算法并查看分布情况

首先是@ meta4解决方案的整理版本,因为它是最充实的:

from random import randrange

def partial_shuffle(l, factor=5):
    n = len(l)
    for _ in range(factor):
        a, b = randrange(n), randrange(n)
        l[b], l[a] = l[a], l[b]

我们可以通过执行以下操作来多次运行:

import numpy as np

n = 8
orig = list(range(n))
occur = np.zeros((n, n), int)

for _ in range(100000):
    x = orig[:]
    partial_shuffle(x,1)
    occur[orig,x] += 1

如果我们将出现率表打印为百分比,则得到:

[[33.5  9.6  9.5  9.4  9.4  9.6  9.5  9.5]
 [ 9.6 33.2  9.7  9.5  9.6  9.6  9.4  9.4]
 [ 9.5  9.6 33.2  9.5  9.6  9.5  9.6  9.5]
 [ 9.5  9.3  9.6 33.4  9.5  9.5  9.5  9.6]
 [ 9.4  9.6  9.4  9.6 33.3  9.5  9.7  9.5]
 [ 9.6  9.5  9.6  9.6  9.4 33.3  9.5  9.6]
 [ 9.4  9.7  9.5  9.5  9.5  9.6 33.2  9.7]
 [ 9.5  9.5  9.6  9.5  9.7  9.5  9.6 33.2]]

每行表示项目移至列的概率。在这种情况下(当时n=8),算法会倾向于将元素保留在大约33%的时间,然后均匀地选择其余元素

然后,我可以使用以下命令运行(整理)pjs代码的版本:

from random import gauss

orderliness = 2

occur = np.zeros((n, n), int)

for _ in range(100000):
    x = sorted(orig, key=lambda i: gauss(i * orderliness, 1))
    occur[orig,x] += 1

这给出了非常不同的输出:

[[91.9  7.9  0.1  0.   0.   0.   0.   0. ]
 [ 7.9 84.1  7.8  0.1  0.   0.   0.   0. ]
 [ 0.1  7.8 84.1  7.9  0.1  0.   0.   0. ]
 [ 0.   0.1  7.9 84.1  7.7  0.1  0.   0. ]
 [ 0.   0.   0.1  7.7 84.2  7.8  0.1  0. ]
 [ 0.   0.   0.   0.1  7.9 84.2  7.7  0.1]
 [ 0.   0.   0.   0.   0.1  7.7 84.2  7.9]
 [ 0.   0.   0.   0.   0.   0.1  7.9 91.9]]

即项目倾向于保持在接近开始的位置

此类表格非常适合检测分布中的偏差,似乎没有上述证据。但是,例如,使用Artyom的解决方案(shuffle(x, lambda: random() / 5))给出以下信息:

[[  0.   37.4   0.    0.    0.   16.7  23.8  22.1]
 [  0.    0.  100.    0.    0.    0.    0.    0. ]
 [  0.    0.    0.  100.    0.    0.    0.    0. ]
 [  0.    0.    0.    0.  100.    0.    0.    0. ]
 [  1.7   0.    0.    0.    0.   83.3  11.9   3. ]
 [  9.    7.4   0.    0.    0.    0.   64.2  19.4]
 [ 26.7  17.9   0.    0.    0.    0.    0.   55.5]
 [ 62.6  37.4   0.    0.    0.    0.    0.    0. ]]

这可能不是OP想要的。对角线的高概率表示将数组旋转一个元素

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何轻轻地从地图视图中删除注释?

来自分类Dev

如何在列表中的python列表中有效地共现

来自分类Dev

如何在jQuery和SASS中制作一个轻轻闪烁的按钮?

来自分类Dev

如何在python中优雅地交织两个长度不均匀的列表?

来自分类Dev

如何在python中更有效地搜索大型列表?

来自分类Dev

如何在python中优雅地交织长度不均匀的两个列表?

来自分类Dev

元组包含C#中的拖曳列表

来自分类Dev

如何在通用Lisp中递归地添加列表?

来自分类Dev

Python:如何在python的列表列表中添加列表?

来自分类Dev

Python 3:如何在等待时将新的Future正确地添加到列表中?

来自分类Dev

如何在python中获取文件列表的列表列表?

来自分类Dev

如何在Python中“解压”列表或元组

来自分类Dev

如何在python中拆分列表

来自分类Dev

如何在Python中重塑元组列表?

来自分类Dev

如何在Python中创建动态列表?

来自分类Dev

如何在Python中过滤列表?

来自分类Dev

如何在python中合并多个列表?

来自分类Dev

如何在Python中获得列表的引用

来自分类Dev

如何在Python中读取元组列表

来自分类Dev

如何在python中实现引用列表?

来自分类Dev

如何在Python中组合列表清单

来自分类Dev

Python - 如何在列表中查找数字

来自分类Dev

Python difflib 如何在列表中工作?

来自分类Dev

如何在python中存储稀疏列表?

来自分类Dev

python 引用如何在列表中工作

来自分类Dev

如何在python中聚合元组列表?

来自分类Dev

如何在 Python 中并行处理列表?

来自分类Dev

如何在python中更改列表

来自分类Dev

如何在 Python 中比较列表中的对?

Related 相关文章

热门标签

归档