在Kotlin和Python上获得相同的洗牌序列

2024-10-02 14:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在{}中{}&Python使用相同的{}但是我得到的序列不同。Python和Kotlin的Cod如下所示:

Kotlin

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-randomhttps://pypi.org/project/java-random/),但这只会生成随机数。我需要shuffle生成相同序列的列表


Tags: varnp序列randomvaljavaintcod
1条回答
网友
1楼 · 发布于 2024-10-02 14:25:37

结合Stef和AKX应答产生所需的输出。i、 例如,在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上是相同的

多谢各位

相关问题 更多 >