NumPy(或者可能是TensorFlow)中是否有API用于执行多个阵列的同步混洗(具有相同的第一维)?
例如,如果我有两个具有维度(N,A)和(N,B)的数组,并且我想随机化每个N个元素的排序,同时保持第一个数组的元素之间的关联,第二个。
是否有用于完成此操作的API或Python习惯用法?
请注意,将这些组合成N个元组的单个数组,然后使用random.shuffle
进行混洗可能是我接受的一个选项,但是我无法让它工作:恢复原始数组(尽管我已经管理过了)凌乱,因为combined_array[:,0]
将维度(N,)与对象作为元素,而不是维度(N,A),除非它是{ {3}} [x for x in combined_array[:,0]
答案 0 :(得分:4)
permutation = numpy.random.permutation(N)
arr1_shuffled = arr1[permutation]
arr2_shuffled = arr2[permutation]
选择一个排列并将其用于两个数组。
答案 1 :(得分:0)
一种简单的解决方法,无需触摸或组合原始集合即可使用随机化的双射函数,该函数映射到数组中元素的索引。然后,您可以使用该函数(映射)并将其应用于两个(或任何数字)数组以获得混洗结果。
这个一般的想法可以应用于任何类型的集合,并不仅限于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])
当然您也可以使用它来创建新订单的新列表/数组。