如何高效地将numpy数组分块洗牌

3
我有一个NumPy数组,看起来像这样 [-1,0,1,0,1,2,1,2,3,...,n-1,n,n+1,n,n+1,n+2..] 我想将数组中的元素以大小为3的块洗牌,是否有一种高效的方法在NumPy中实现?
我知道可以使用以下shuffle方法来打乱NumPy数组,但这会给我一个完全打乱的数组。有没有一种方法可以在NumPy中以块的形式打乱它?
import numpy.random as rng

ind = numpy.arange(100)
rng = numpy.random.RandomState(123)
rng.shuffle(ind)
1个回答

8

将数据重塑为3列。 shuffle 文档中指出,它只是对第一维进行随机排序:

ind=np.arange(99)  # multple of 3
ind=ind.reshape(-1,3)
rng.shuffle(ind)
ind.flatten()

为了在处理后保持数组扁平化,最后一个操作不应该是ind = ind.flatten()吗? - Guillem Cucurull
2
对的。flatten不是一个原地操作。我从一个交互式会话中改编了这段代码片段,在那里我得到了最后一行的自动打印。 - hpaulj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接