Python 洗牌numpy数组,保留各自的值

Python 洗牌numpy数组,保留各自的值,python,arrays,numpy,shuffle,Python,Arrays,Numpy,Shuffle,我有两个numpy数组,都有一百万个空格,第一个数组中的所有值都与第二个数组中的值对应。我想在保留各自的值的同时对它们进行洗牌。怎么做?由于两个阵列的大小相同,因此可以使用 def unison_shuffled_拷贝(a、b): 断言len(a)==len(b)#如果我们知道数组a和b的长度相同,则不需要 p=numpy.random.permutation(len(a))#生成无序索引 返回a[p],b[p]#根据p使用相同的排列制作混洗副本 这是引用,但有一些更改。您可以使用跟踪nump

我有两个numpy数组,都有一百万个空格,第一个数组中的所有值都与第二个数组中的值对应。我想在保留各自的值的同时对它们进行洗牌。怎么做?

由于两个阵列的大小相同,因此可以使用

def unison_shuffled_拷贝(a、b):
断言len(a)==len(b)#如果我们知道数组a和b的长度相同,则不需要
p=numpy.random.permutation(len(a))#生成无序索引
返回a[p],b[p]#根据p使用相同的排列制作混洗副本

这是引用,但有一些更改。

您可以使用跟踪
numpy.random.state
,并在洗牌之间使用重置它。这将使洗牌在两个数组上的行为相同

import numpy as np

arr1 = np.arange(9).reshape((3, 3))
arr2 = np.arange(10,19).reshape((3, 3))

arr1, arr2

# array([[0, 1, 2],
#        [3, 4, 5],
#        [6, 7, 8]]),
# array([[10, 11, 12],
#        [13, 14, 15],
#        [16, 17, 18]])

# get state
state = np.random.get_state()
np.random.shuffle(arr1)
arr1

# array([[6, 7, 8],
#        [3, 4, 5],
#        [0, 1, 2]])

# reset state and shuffle other array
np.random.set_state(state)
np.random.shuffle(arr2)
arr2

#array([[16, 17, 18],
#       [13, 14, 15],
#       [10, 11, 12]])