Python数组的同步洗牌是否有一个习惯用法或API?

2024-04-16 13:04:46 发布

您现在位置:Python中文网/ 问答频道 /正文

NumPy(或者TensorFlow)中是否有一个API来执行多个数组(具有相同的第一维度)的同步洗牌?你知道吗

例如,如果我有两个维度为(N,A)和(N,B)的数组,我想随机化每个数组的N个元素的顺序,同时保持第一个数组和第二个数组的元素之间的关联。你知道吗

有没有API或Python的习惯用法来实现这一点?你知道吗


请注意,将这些元素组合到一个由N个元组组成的数组中,然后用random.shuffle洗牌,这可能是我可以接受的答案,但我无法做到这一点:如果combined_array[:,0]将有维度(N,)和对象作为元素,而不是维度(N,a),那么将原始数组取回是(尽我所能)混乱的它是manually rebuilt with something like[x for x in combined_array[:,0]


Tags: 对象答案numpyapi元素顺序tensorflowrandom
2条回答

解决这个问题的一个简单方法是使用随机双射函数,该函数映射到数组中元素的索引,而不必接触或组合原始集合。然后,您可以使用该函数(映射)并将其应用于两个(或任何数量的)数组以获得无序排列的结果。你知道吗

这个基本思想可以应用于任何类型的集合,而不仅仅限于Numpy数组。你知道吗

最简单的方法是拥有一个所有索引的无序列表,然后,要随机遍历同步数组,只需遍历无序索引列表并访问当前索引处的元素:

from random import shuffle

# These would be your input lists (or arrays, doesn’t really matter)
list1 = […]
list2 = […]

# generate a list of all indexes
indexes = list(range(len(list1)))

# shuffle the indexes
shuffle(indexes)

for i in indexes:
    print(list1[i], list2[i])

当然,您也可以使用它来创建具有新顺序的新列表/数组。你知道吗

permutation = numpy.random.permutation(N)

arr1_shuffled = arr1[permutation]
arr2_shuffled = arr2[permutation]

选择一个排列并将其用于两个数组。你知道吗

相关问题 更多 >