复制后奇怪的numpy数组赋值

2024-04-26 12:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天偶然发现了这个问题,我看不出问题出在哪里:

print(np.unique(label))
>>> [0. 1. 2. 3. 4.]

LAC = label
print(np.unique(LAC))
>>> [0. 1. 2. 3. 4.]

print(np.unique(label))
>>> [0. 1. 2. 3. 4.]

LAC[LAC != 4] = 0
LAC[LAC == 4] = 1

print(np.unique(LAC))
>>> [0. 1.]

print(np.unique(label))
>>> [0. 1.]

是我做错了什么吗label是一个numpy数组(44,640,640),而LAC应该是label的副本,但出于某种原因,它也会受到影响

我不明白这是从哪里来的。有人有主意吗


1条回答
网友
1楼 · 发布于 2024-04-26 12:17:00

LAC = label不将label复制到新数组中。它只是将同一个对象分配给LAC。因此,当您更改其中一个时,另一个也会更改。可以将其视为具有不同名称的相同数组

如果希望创建阵列的新副本,请使用np.copy。下面是一个例子来说明这一点:

label = np.array([0., 1., 2., 3., 4., 0., 1., 2., 3., 4.])
print(np.unique(label))
#[0. 1. 2. 3. 4.]

#LAC and label point to the same object
LAC = label
#this changes both LAC and label
LAC[LAC != 4] = 0

print(np.unique(LAC))
#[0. 4.]

print(np.unique(label))
#[0. 4.]


label = np.array([0., 1., 2., 3., 4., 0., 1., 2., 3., 4.])
#make a new copy of label
LAC = label.copy()
#this changes ONLY LAC
LAC[LAC != 4] = 0

print(np.unique(LAC))
#[0. 4.]

print(np.unique(label))
#[0. 1. 2. 3. 4.]

相关问题 更多 >