![](https://img.haomeiwen.com/i7691822/05a879419d26f004.jpg)
1. 打乱次序结果不同
np.random.permutation与np.random.shuffle有两处不同:
-
如果传给permutation一个矩阵,它会返回一个洗牌后的矩阵副本;而shuffle只是对一个矩阵进行洗牌,无返回值。
-
如果传入一个整数,它会返回一个洗牌后的arange。
1.1 无返回值
**np.random.shuffle **
arr = np.arange(9).reshape((3, 3))
print(arr)
'''打乱次序'''
np.random.shuffle(arr)
print(arr)
[[0 1 2]
[3 4 5]
[6 7 8]]
[[6 7 8]
[0 1 2]
[3 4 5]]
1.2 有返回值
permutation()
train_data = np.arange(21).reshape((7,3))
train_label = np.array(['a1','a2','a3','a4','a5','a6','a7'])
print(train_data)
print(train_label)
shuffle_ix = np.random.permutation(np.arange(len(train_data)))
train_data = train_data[shuffle_ix]
train_label = train_label[shuffle_ix]
print(train_data)
print(train_label)
输出:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]
[15 16 17]
[18 19 20]]
['a1' 'a2' 'a3' 'a4' 'a5' 'a6' 'a7']
[[ 6 7 8]
[18 19 20]
[12 13 14]
[ 0 1 2]
[ 9 10 11]
[ 3 4 5]
[15 16 17]]
['a3' 'a7' 'a5' 'a1' 'a4' 'a2' 'a6']
2. 打乱次序结果相同
使用rng = np.random.default_rng(12345)语句重置种子,这样混洗之后结果相同
当然rng = np.random.default_rng() ,混洗后结果不相同
train_data = np.arange(21).reshape((7,3))
train_label = np.array(['a1','a2','a3','a4','a5','a6','a7'])
print(train_data)
print(train_label)
index_list = list(range(len(train_label)))
rng = np.random.default_rng(12345)
rng.shuffle(index_list)
print(index_list)
shuffle_ix = index_list
#shuffle_ix = np.random.permutation(np.arange(len(train_data)))
train_data = train_data[shuffle_ix]
train_label = train_label[shuffle_ix]
print(train_data)
print(train_label)
多次运行的结果发现一样的,输出:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]
[15 16 17]
[18 19 20]]
['a1' 'a2' 'a3' 'a4' 'a5' 'a6' 'a7']
[4, 3, 0, 2, 1, 6, 5]
[[12 13 14]
[ 9 10 11]
[ 0 1 2]
[ 6 7 8]
[ 3 4 5]
[18 19 20]
[15 16 17]]
['a5' 'a4' 'a1' 'a3' 'a2' 'a7' 'a6']
网友评论