Python: Присвоение начального массива numpy другой переменной, изменение нескольких элементов новой переменной изменяет начальный массив numpy - PullRequest
0 голосов
/ 10 июня 2018

Мне нужно выполнить вычисления для начального массива 3x3 (скажем, «x»), который мне понадобится позже для дальнейших вычислений.Итак, у меня есть другая переменная ('y'), чтобы сделать копию 'x' (y = x), выполнить вычисления для 'y', а затем использовать x для более поздних целей.Но почему-то адрес 'y' меняется на 'x', даже если я назначаю его изначально отличным от 'x'

import numpy as np

x = np.random.rand(3,3)
y = np.random.rand(3,3)

print 'y',id(y)

y = x
y[1][1] = -y[1][1]

print x[1][1] + y[1][1]  #This needs to be 0.
print 'x',id(x)
print 'y',id(y)

В приведенном выше коде мне нужна строка 9 ('x [1] [1]+ y [1] [1] '), чтобы вывести 0, но получим 2 раза -x [1] [1].В чем причина этой проблемы, и если бы вы могли предложить какой-то метод, чтобы избежать этого?

1 Ответ

0 голосов
/ 10 июня 2018

Поскольку y=x копирует только ссылку, а не создает другую копию массива

Вы должны заменить эту строку на

y = x[:]

В противном случае изменениеx также меняет y и наоборот.

Однако этот метод подходит только для обычных list, а не numpy массивов.Это возможно следующим образом (также более явным и читабельным):

y = np.copy(x)

Если вы хотите проверить это самостоятельно, вы можете print id(y) и print id(x) после этого назначения и увидеть, что в вашем случае ониодинаковы, в то время как в истинном экземпляре они отличаются

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...