У меня есть список / массив пустых массивов, представляющих объекты, разбитые на подгруппы.
Я хотел бы создать копию этого массива, в которой я могу поменять элементы внутри подгрупп и оставить исходные группировки без изменений.
Функция, которую я написал для этого:
def group_swap(groups):
# Chooses two random groups and swaps two random elements from each
group.
gr = np.copy(groups)
g1 = np.random.randint(len(gr))
g2 = np.random.randint(len(gr))
if g1 != g2:
e1 = np.random.randint(len(gr[g1]))
e2 = np.random.randint(len(gr[g2]))
gr[g1][e1] ,gr[g2][e2] = gr[g2][e2].copy(),gr[g1][e1].copy()
return(gr)
else:
return(groups)
Исходя из этого вопроса , я смог поменять элементы. Однако элементы в исходном массиве также меняются местами, как в этом примере.
a = np.array_split(np.arange(10),3)
print('orginal before swap: ',a)
a_swap = group_swap(a)
print('original after swap: ',a)
print('swapped array: ',a_swap)
Что дает:
original before swap:
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
original after swap:
[array([0, 1, 2, 7]), array([4, 5, 6]), array([3, 8, 9])]
swapped array:
[array([0, 1, 2, 7]) array([4, 5, 6]) array([3, 8, 9])]
В идеале, массив a должен быть неизменным, и только a_swap показывает замененные элементы. Я надеялся, что создание и работа с копией массива в моей функции поможет, но это не сработало.
Может ли кто-нибудь помочь указать, что мне не хватает? У меня такое чувство, что я потом надену себя.
Спасибо
PS: как ни странно, похоже, что работает, если количество элементов в каждой группе одинаково, но я не понимаю, почему.
original before swap:
[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8, 9, 10, 11])]
original after swap:
[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8, 9, 10, 11])]
swapped array:
[[ 0 1 8 3]
[ 4 5 6 7]
[ 2 9 10 11]]