【发布时间】:2019-03-12 13:30:01
【问题描述】:
我有一个 numpy 数组,我想改组它的一部分。例如,使用以下数组:
import numpy as np
import random
a = np.arange(15)
# => array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
我想做:
shuffle_parts(a, [(0, 3), (10, 13)])
# => array([ 2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 11, 10, 13, 14])
# ^^^^^^^^^ ^^^^^^^^^^
# Shuffle those 3 values and those 3 values
以下内容将对所有数组进行洗牌:(不是我想要的)
random.shuffle(a)
# => array([10, 11, 8, 1, 13, 5, 9, 14, 4, 7, 2, 12, 3, 0, 6])
一种方法是像这样使用拆分/连接:
splits = np.split(a, 5)
random.shuffle(splits[0])
random.shuffle(splits[3])
np.concatenate(splits)
# => array([ 2, 0, 1, 3, 4, 5, 6, 7, 8, 11, 10, 9, 12, 13, 14])
# ^^^^^^^^^ ^^^^^^^^^^
# Correctly shuffled Shuffled but off by 1 index
这几乎就是我想要的。我的问题:
- 我可以写
shuffle_parts,其中索引是自定义的(具有任意索引的部分,不限于模数,以及长度可变的部分) - numpy 中是否有我错过的方法可以帮助我做到这一点?
【问题讨论】:
-
只是随机播放数组的切片视图,例如
np.random.shuffle(a[0:3])
标签: python arrays numpy shuffle