首页 > 解决方案 > 以相同的方式随机化 2 个 numpy 数组

问题描述

我有 2 个np.ndarray()对象,我想像这样随机化(或随机播放)它们:

>>> a
[[12. 13. 24. ... 23. 45. 67.] [32. 10. 23. ... 23. 45. 67.] [12. 13. 24. ... 23. 45. 67.] ... [12. 13. 24. ... 23. 45. 67.]]
>>> b
[0. 0. 0. ... 1.]
>>> shuffle(a, b)
>>> a
[[12. 13. 24. ... 23. 45. 67.] [32. 10. 23. ... 23. 45. 67.] [12. 13. 24. ... 23. 45. 67.] ... [12. 13. 24. ... 23. 45. 67.]]
>>> b
[1. 0. 0. ... 0.]

变量中的每个数字b对应于变量中我的 AI 训练数据的标签a

标签: pythonnumpyrandomnumpy-ndarraypython-3.8

解决方案


使用 Numpy

您可以使用np.c_将它们混在一起,然后将它们放回单独的数组中 -

import numpy as np

#Creating same X and y for demonstration
X = np.arange(0,10).reshape(5,2)
y = np.arange(0,10).reshape(5,2)

c = np.c_[X,y]
np.random.shuffle(c)

X1, y1 = c[:,:X.shape[1]], c[:,:y.shape[1]]

print(X1)
print(y1)
# Note, same order remains

[[8 9]
 [0 1]
 [4 5]
 [6 7]
 [2 3]]

[[8 9]
 [0 1]
 [4 5]
 [6 7]
 [2 3]]

使用 Sklearn

更好的选择是使用 sklearn api -

from sklearn.utils import shuffle
X, y = shuffle(X, y, random_state=0)

推荐阅读