Почему исходный массив NumPy изменен при изменении другого массива, созданного из него? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть массив NumPy r, когда я использовал для создания из него еще один массив r2 и, повернув этот новый массив r2 на ноль, он также изменил исходный массив r

IЯ искал похожие вопросы, но не нашел ни одного удовлетворительного ответа на этот вопрос, поэтому, пожалуйста, подумайте над предложением соответствующего ответа.

Оригинальный массив:

>>> r
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35]])

другой массив numpy из исходного массива r2 следующим образом:

>>> r2 = r[:3, :3]
>>> r2
array([[ 0,  1,  2],
       [ 6,  7,  8],
       [12, 13, 14]])

Итак, когда я устанавливаю новый массив в r2 в ноль

>>> r2[:]  = 0
>>> r2
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

Итак, когда я вижу оригиналМассив затем также был изменен:

Массив Изменен после изменения нового массива:

>>> r
array([[ 0,  0,  0,  3,  4,  5],
       [ 0,  0,  0,  9, 10, 11],
       [ 0,  0,  0, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29],
       [30, 30, 30, 30, 30, 30]])

С наступающим Новым годом, ребята!

1 Ответ

0 голосов
/ 27 декабря 2018

Объяснение

r2 = r[:3, :3] 

Не создает новый массив, но переименовывает текущий массив.То, что вам нужно сделать, известно как «глубокая копия».Используйте numpy.copy (), чтобы делать то, что вам нужно.

x = np.array([1, 2, 3])
y = x
z = np.copy(x)

x[0] = 10
x[0] == y[0]
True
x[0] == z[0]
False

Подробнее от,

https://het.as.utexas.edu/HET/Software/Numpy/reference/generated/numpy.copy.html

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