【发布时间】:2016-12-10 15:56:04
【问题描述】:
如果您更改 numpy 数组的视图,原始数组也会被更改。这是预期的行为。
arr = np.array([1,2,3])
mask = np.array([True, False, False])
arr[mask] = 0
arr
# Out: array([0, 2, 3])
但是,如果我查看这样的视图并对其进行更改,则原始数组不会更改:
arr = np.array([1,2,3])
mask_1 = np.array([True, False, False])
mask_1_arr = arr[mask_1] # Becomes: array([1])
mask_2 = np.array([True])
mask_1_arr[mask_2] = 0
arr
# Out: array([1, 2, 3])
这对我来说意味着,当你查看一个视图时,你实际上会得到一个副本。它是否正确?这是为什么呢?
如果我使用数字索引的 numpy 数组而不是布尔值的 numpy 数组,则会发生相同的行为。 (例如,arr[np.array([0])][np.array([0])] = 0 不会将arr 的第一个元素更改为 0。)
【问题讨论】: