python - 两个不同编辑器中的相同种子给我不同的结果(Pycharm 和 Jupyter Notebook)

标签 python jupyter-notebook pycharm random-seed

我有以下代码:

import json
import pandas as pd
import numpy as np
import random

pd.set_option('expand_frame_repr', False)  # To view all the variables in the console

# read data
records = []
with open('./data/data_file.txt', 'r') as file:
    for line in file:
        record = json.loads(line)
        records.append(record)

# construct list of ids
ids = set()
for record in records:
    for w in record['A']:
        ids.add(w['NAME'])

random.seed(1234); sampled_ids = random.sample(ids,50)

当我在 Pycharm IDE 中运行此代码一次,然后立即在 Jupyter Notebook 中运行时 - 我在每个代码中都采样了不同的 id。这是怎么回事?

附注
我在最后一行使用了分号,因为我发现如果我尝试在一行上设置种子,然后在下一行上采样 - 即使在同一个 IDE 中,每次运行都会得到不同的结果。这对我来说确实很神秘。我使用Python 3.7

最佳答案

造成这种行为的原因在于setSet 是根据对象的 hash 值(集合的元素必须是可哈希的,即必须具有 __hash__ method )和 hash 值构造的启动另一个控制台时有所不同。 (并不总是如此,但这是另一个主题)。 例如,同一 IDE 中的两个控制台有结果:

1/A:

arr1 = set('skevboa;gj[pvemoeprnjpdbr ]p')
random.seed(1234)
random.sample(arr1, 3)
Out[47]: ['p', 'k', ']']
random.seed(1234)
random.sample(arr1, 3)
Out[48]: ['p', 'k', ']']
hash('s')
Out[49]: 1861403979552045688

2/A:

arr1 = set('skevboa;gj[pvemoeprnjpdbr ]p')
random.seed(1234)
random.sample(arr1, 3)
Out[29]: [';', 'a', 'b']
random.seed(1234)
random.sample(arr1, 3)
Out[30]: [';', 'a', 'b']
hash('s')
Out[31]: -2409441490032867064

了解问题的根源,您可以选择解决问题的方法。例如,使用已排序:

1/A:

random.seed(1234)
random.sample(sorted(arr1), 3)
Out[50]: ['p', ']', ' ']

2/A:

random.seed(1234)
random.sample(sorted(arr1), 3)
Out[32]: ['p', ']', ' ']

关于python - 两个不同编辑器中的相同种子给我不同的结果(Pycharm 和 Jupyter Notebook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480278/

相关文章:

python - pyplot - 负数未正确显示

python - py 启动器找不到我的 Python 2.7

python - conda 环境是否可以访问 'root' 环境? (==系统包)?

python - 在 Jupyter 实验室中连接 pytrends 时出错

python - 在PyCharm中启用 undefined variable 的警告

python - '\b' 不会在 PyCharm 控制台中打印退格

python - 如何使用Paramiko exec_command获取每个依赖的命令执行输出

python - 如何对重复模式进行分类?

python - 从父目录中的python模块导入子目录中的jupyter笔记本文件

python - 为什么 PyCharm 中 numpy 的范围显示精度错误?