【问题标题】:Get same sequence of shuffle on Kotlin and Python在 Kotlin 和 Python 上获得相同的 shuffle 序列
【发布时间】:2021-01-19 07:58:36
【问题描述】:

我是shufflelistKotlinPython 使用相同的seed,但我得到不同的顺序。 Python 和 Kotlin 上的 Cod 如下:

科特林

var trainInput = arrayListOf<Int>(1,2,3,4,5)
val randomSeed = 1549786796.toLong()
trainInput.shuffle(Random(randomSeed))

输出: [1、3、5、2、4]

Python:

import numpy as np
arr = np.array([1,2,3,4,5])
np.random.seed(1549786796)
np.random.shuffle(arr)

输出: [3 2 4 1 5]

谁能指出我怎样才能在两个平台上获得相同的序列?

谢谢。

编辑 我还检查了 Stef 建议的库 java-random (https://pypi.org/project/java-random/) 但这只会生成随机数。我需要shuffle生成相同序列的列表。

【问题讨论】:

  • Java 和 numpy 使用不同的随机数生成器,那么您为什么希望它们产生相同的结果呢?请参阅stackoverflow.com/questions/11162798/…,尤其是pypi.org/project/java-random
  • @Stef:我正在处理Machine Learning 问题,我想比较结果,为了相同,输入序列必须相同。我想知道,如果我能得到相同的序列。
  • 所以java-random(见上面的链接)应该是你的朋友:)
  • @Stef: java-random 只生成随机数。我想shuffle生成相同序列的列表。
  • 用两种语言实现一些简单的随机数生成器(例如stackoverflow.com/a/3062783/51685)并使用它来支持您的Fisher-Yates shuffle 实现?

标签: python numpy kotlin sequence shuffle


【解决方案1】:

结合 Stef 和 A​​KX answer 产生所需的输出。即,在 Python 端使用java-random 包产生相同的随机数,使用相同的seed,然后应用Fisher-Yates 算法产生相同的序列。

import numpy as np
import javarandom as jrandom

r = jrandom.Random(1549786796)

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

def randomize(arr, n):
    # Start from the last element and swap one by one. We don't
    # need to run for the first element that's why i > 0
    for i in range(n - 1, 0, -1):
        # Pick a random index from 0 to i
        j = r.nextInt(i + 1)

        # Swap arr[i] with the element at random index
        arr[i], arr[j] = arr[j], arr[i]
    return arr

输出:[7 5 1 4 6 2 3 8]

上面的输出在 Kotlin 和 Python 上是一样的。

谢谢。

【讨论】:

  • 很高兴我们能帮上忙! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2014-01-06
  • 2020-02-06
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多