用python洗牌数组最简单的方法是什么?
当前回答
注意random.shuffle()不应该用于多维数组,因为它会导致重复。
假设你想要沿着数组的第一个维度洗牌,我们可以创建以下测试示例,
import numpy as np
x = np.zeros((10, 2, 3))
for i in range(10):
x[i, ...] = i*np.ones((2,3))
沿着第一个轴,第i个元素对应于一个2x3矩阵其中所有的元素都等于i。
如果我们对多维数组使用正确的洗牌函数,即np.random.shuffle(x),数组将按照需要沿着第一个轴洗牌。但是,使用random.shuffle(x)将导致重复。你可以在洗牌后运行len(np.unique(x))来检查这一点,使用np.random.shuffle()会得到10(正如预期的那样),但使用random.shuffle()时只有5左右。
其他回答
import random
random.shuffle(array)
import random
random.shuffle(array)
除了前面的回复,我想介绍另一个功能。
numpy。random。shuffle和random。进行原地洗牌。但是,如果你想返回一个打乱的数组,可以使用numpy.random.permutation函数。
其他的答案是最简单的,但它是有点烦人的随机。Shuffle方法实际上并不返回任何东西——它只是对给定的列表进行排序。如果你想链式调用,或者只是能够在一行中声明一个洗牌数组,你可以这样做:
import random
def my_shuffle(array):
random.shuffle(array)
return array
然后你可以这样做:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
我不知道我使用了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
推荐文章
- 我如何在Django中过滤一个DateTimeField的日期?
- 数组与链表
- 在Python中用索引迭代列表
- -e,——editable选项在pip install中什么时候有用?
- 使用pip命令从requirements.txt升级python包
- Django更改默认的runserver端口
- 输入对象的datetime。Datetime没有Datetime属性
- numpy数组的Python内存使用情况
- NumPy或Pandas:保持数组类型为整数,同时具有NaN值
- 列表理解条件中的' elif '
- Python的“property”和“attribute”有什么区别?
- 在Python中格式化多行字典的正确方法是什么?
- 向异常添加信息?
- Sphinx autodoc不够自动
- 如何限制Django模型中数值字段的最大值?