如何相应地洗牌矩阵和数组
How to shuffle a matrix and an array accordingly
假设我有一个名为 X
的 mXd
矩阵和一个名为 Y
的 mX1
数组(使用 numpy
)。 X
的行对应于 Y
.
的行
现在假设我需要打乱 X
中的数据(行)。我用过:
random.shuffle(X)
有没有办法让我跟踪 X
的洗牌方式,以便我可以相应地洗牌 Y
?
谢谢:)
您可以使用 numpy.random.permutation
创建 indices
的排列列表,然后使用 indices
随机排列 X
和 Y
:
>>> import numpy
>>> m = 10
>>> X = numpy.random.rand(m, m)
>>> Y = numpy.random.rand(m)
>>> indices = numpy.random.permutation(m)
>>> indices
array([4, 7, 6, 9, 0, 3, 1, 2, 8, 5])
>>> Y
array([ 0.53867012, 0.6700051 , 0.06199551, 0.51248468, 0.4990566 ,
0.81435935, 0.16030748, 0.96252029, 0.44897724, 0.98062564])
>>> Y = Y[indices]
>>> Y
array([ 0.4990566 , 0.96252029, 0.16030748, 0.98062564, 0.53867012,
0.51248468, 0.6700051 , 0.06199551, 0.44897724, 0.81435935])
>>> X = X[indices, :]
假设我有一个名为 X
的 mXd
矩阵和一个名为 Y
的 mX1
数组(使用 numpy
)。 X
的行对应于 Y
.
现在假设我需要打乱 X
中的数据(行)。我用过:
random.shuffle(X)
有没有办法让我跟踪 X
的洗牌方式,以便我可以相应地洗牌 Y
?
谢谢:)
您可以使用 numpy.random.permutation
创建 indices
的排列列表,然后使用 indices
随机排列 X
和 Y
:
>>> import numpy
>>> m = 10
>>> X = numpy.random.rand(m, m)
>>> Y = numpy.random.rand(m)
>>> indices = numpy.random.permutation(m)
>>> indices
array([4, 7, 6, 9, 0, 3, 1, 2, 8, 5])
>>> Y
array([ 0.53867012, 0.6700051 , 0.06199551, 0.51248468, 0.4990566 ,
0.81435935, 0.16030748, 0.96252029, 0.44897724, 0.98062564])
>>> Y = Y[indices]
>>> Y
array([ 0.4990566 , 0.96252029, 0.16030748, 0.98062564, 0.53867012,
0.51248468, 0.6700051 , 0.06199551, 0.44897724, 0.81435935])
>>> X = X[indices, :]