Tet*_*ed_ 9 python random python-3.x
我有一个函数,为简单起见,我将其称为 shuffler,它需要一个列表,随机给出一个种子 17,然后打印该列表。
def shuffler( n ):
import random
random.seed( 17 )
print( random.shuffle( n ) )
Run Code Online (Sandbox Code Playgroud)
我将如何创建另一个名为 unshuffler 的函数,该函数“解混”由 shuffler() 返回的列表,假设我知道种子,将其带回到我输入到 shuffler() 的列表中?
小智 8
只是想贡献一个与 numpy 常用的功能模式更兼容的答案。最终,这个解决方案应该执行得最快,因为它将利用 numpy 的内部优化,而内部优化本身可以通过使用numba等项目来进一步优化。它应该比在 python 中使用传统的循环结构快得多。
import numpy as np
original_data = np.array([23, 44, 55, 19, 500, 201]) # Some random numbers to represent the original data to be shuffled
data_length = original_data.shape[0]
# Here we create an array of shuffled indices
shuf_order = np.arange(data_length)
np.random.shuffle(shuf_order)
shuffled_data = original_data[shuf_order] # Shuffle the original data
# Create an inverse of the shuffled index array (to reverse the shuffling operation, or to "unshuffle")
unshuf_order = np.zeros_like(shuf_order)
unshuf_order[shuf_order] = np.arange(data_length)
unshuffled_data = shuffled_data[unshuf_order] # Unshuffle the shuffled data
print(f"original_data: {original_data}")
print(f"shuffled_data: {shuffled_data}")
print(f"unshuffled_data: {unshuffled_data}")
assert np.all(np.equal(unshuffled_data, original_data))
Run Code Online (Sandbox Code Playgroud)