Я хочу перетасовать / переставить строки списка списков (двумерный массив) target
в Python.
Я создаю список train
, а затем перетасовываю его на np.random.shuffle()
и используюэто перестановка индексов строк target
в том же порядке.
Я знаю, что не могу просто написать new_list = old_list, чтобы скопировать один список в другой, поэтому (я думаю) я использовал правильный способскопируйте target
в cop
с помощью cop = [row[:] for row in target]
упомянутого здесь, на SO.
Но даже после запуска приведенного ниже кода я не могу понять, почему cop
меняет значение во времяпетля.В результате, target
не то, что я ожидаю.
Код, который я пытаюсь:
import numpy as np
train = [0, 1, 2, 3, 4]
print("train: ", train)
target = np.hstack([np.arange(5).reshape(5,1), np.arange(100, 105).reshape(5,1),
np.arange(200, 205).reshape(5,1)])
print(target)
np.random.shuffle(train)
print("Shuffled train: ", train)
cop = [row[:] for row in target]
for i in range(len(train)):
print(train[i], '-----', cop[train[i]], '-------', cop)
target[i] = list(cop[train[i]])
print("Target: ", target)
print("Cop: ", cop)
Пример вывода:
train: [0, 1, 2, 3, 4]
[[ 0 100 200]
[ 1 101 201]
[ 2 102 202]
[ 3 103 203]
[ 4 104 204]]
Shuffled train: [4, 3, 2, 0, 1]
4 ----- [ 4 104 204] ------- [array([ 0, 100, 200]), array([ 1, 101,
201]), array([ 2, 102, 202]), array([ 3, 103, 203]), array([ 4, 104,
204])]
3 ----- [ 3 103 203] ------- [array([ 4, 104, 204]), array([ 1, 101,
201]), array([ 2, 102, 202]), array([ 3, 103, 203]), array([ 4, 104,
204])]
2 ----- [ 2 102 202] ------- [array([ 4, 104, 204]), array([ 3, 103,
203]), array([ 2, 102, 202]), array([ 3, 103, 203]), array([ 4, 104,
204])]
0 ----- [ 4 104 204] ------- [array([ 4, 104, 204]), array([ 3, 103,
203]), array([ 2, 102, 202]), array([ 3, 103, 203]), array([ 4, 104,
204])]
1 ----- [ 3 103 203] ------- [array([ 4, 104, 204]), array([ 3, 103,
203]), array([ 2, 102, 202]), array([ 4, 104, 204]), array([ 4, 104,
204])]
Target: [[ 4 104 204]
[ 3 103 203]
[ 2 102 202]
[ 4 104 204]
[ 3 103 203]]
Cop: [array([ 4, 104, 204]), array([ 3, 103, 203]), array([ 2, 102, 202]), array([ 4, 104, 204]), array([ 3, 103, 203])]
Процесс завершен с выходомкод 0