用python洗牌数组最简单的方法是什么?
当前回答
除了前面的回复,我想介绍另一个功能。
numpy。random。shuffle和random。进行原地洗牌。但是,如果你想返回一个打乱的数组,可以使用numpy.random.permutation函数。
其他回答
我不知道我使用了random。shuffle(),但它返回'None'给我,所以我写了这个,可能对别人有帮助
def shuffle(arr):
for n in range(len(arr) - 1):
rnd = random.randint(0, (len(arr) - 1))
val1 = arr[rnd]
val2 = arr[rnd - 1]
arr[rnd - 1] = val1
arr[rnd] = val2
return arr
除了前面的回复,我想介绍另一个功能。
numpy。random。shuffle和random。进行原地洗牌。但是,如果你想返回一个打乱的数组,可以使用numpy.random.permutation函数。
另一种方法是使用sklearn
from sklearn.utils import shuffle
X=[1,2,3]
y = ['one', 'two', 'three']
X, y = shuffle(X, y, random_state=0)
print(X)
print(y)
输出:
[2, 1, 3]
['two', 'one', 'three']
优点:可以同时随机多个数组,而不会中断映射。'random_state'可以控制可复制行为的变换。
你可以用随机键对数组排序
sorted(array, key = lambda x: random.random())
键只读取一次,所以在排序期间比较项目仍然有效。
但看起来random.shuffle(array)会更快,因为它是用C写的
顺便说一下,这是O(Nlog(N)
# arr = numpy array to shuffle
def shuffle(arr):
a = numpy.arange(len(arr))
b = numpy.empty(1)
for i in range(len(arr)):
sel = numpy.random.random_integers(0, high=len(a)-1, size=1)
b = numpy.append(b, a[sel])
a = numpy.delete(a, sel)
b = b[1:].astype(int)
return arr[b]
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 使用C返回一个数组
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 如何在Ruby中生成a和b之间的随机数?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式