Подтвердить что ты не робот

Массовые массивы: свопинг с использованием одновременных заданий

Я пытаюсь обменивать столбцы массива Numpy с помощью одновременных назначений, и я получаю неожиданное поведение:

A = arange(12).reshape(3,4)
print(A)

# prints [[ 0  1  2  3]    Ok
#         [ 4  5  6  7]
#         [ 8  9 10 11]]

A[:,0], A[:,1] = A[:,1], A[:,0]
print(A)

# prints [[ 1  1  2  3]    Not what intended (swap)
#         [ 5  5  6  7]
#         [ 9  9 10 11]]

Ожидаемое поведение: "представления" массивов на RHS оцениваются, а затем назначение выполняется целевым объектом LHS, "копируя" содержимое представлений RHS в новые местоположения. Я утверждаю, что копии выполняются в назначениях "slice-to-slice" из-за следующего:

A = arange(12).reshape(3,4)
A[:,0] = A[:,1]
A[:,1] = array([99,99,99])
print A[:,0]

# prints: [1 5 9]

Что на самом деле происходит: кажется, что при одновременных назначениях срезов ndarray оценивает и назначает различные термины на RHS и LHS "по одному": сначала A[:,0] = A[:,1], а затем A[:,1] = A[:,0].

Это связано с тем, что класс ndarray настраивает одновременные назначения в отличие от стандартного пути python?

4b9b3361