Я создал этот 2D array с numpy:

>>>import numpy as np
>>>np.random.seed(0)
>>>x2 = np.random.randint(10, size=(3, 4))
>>>print(x2)
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]

Затем я создал еще один подмассив из x2

>>>x2_sub = x2[:2, :2]
>>>print(x2_sub)
[[5 0]
 [7 9]]

Теперь, если я изменю этот подмассив, исходный массив изменится !!:

>>>x2_sub[0, 0] = 99
>>>print(x2_sub)
[[99 0]
 [7 9]]
>>>print(x2)
[[99  0  3  3]
 [ 7  9  3  5]
 [ 2  4  7  6]]

Я не хочу, чтобы исходный массив менялся. Кто-нибудь может сказать мне, что я делаю в носке?

0
zazz 2 Май 2021 в 23:31

2 ответа

Лучший ответ

Срезы в numpy создают представление в отличие от списков Python. Используйте .copy(), чтобы явно создать копию:

x2_sub = x2[:2, :2].copy()
2
juanpa.arrivillaga 2 Май 2021 в 20:46

Измените эту строку:

x2_sub = x2[:2, :2]

К этой строке:

x2_sub= np.array(x2[:2, :2])
-1
KnowledgeGainer 2 Май 2021 в 21:08