numpy 打乱次序结果不同和相同

2021-11-05  本文已影响0人  逍遥_yjz

1. 打乱次序结果不同

np.random.permutation与np.random.shuffle有两处不同:

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']
上一篇 下一篇

猜你喜欢

热点阅读