如果与ndarray Python中的列表不同,如何替换多个值



我有一个ndarray,我正在尝试替换它不在给定列表中的值。此列表不会总是具有相同的值或相同的len大小。我尝试了for循环,但似乎第一个循环完成后,它只保存列表上的第一个项目,所以当处理下一个循环时,它会将所有内容都保留为零。以下是我所做的:

arr = [[1, 1, 0, 0, 2],
[1, 1, 0, 2, 2],
[0, 0, 0, 2, 2],
[3, 3, 0, 0, 0],
[3, 3, 0, 4, 4],
[0, 3, 0, 4, 4]] 
lst = [1,2]
y,x = arr.shape
test = arr
for i in range(0, y):
for j in range(0, x):
value = test[i][j]
for k in lst:
if value != lst[k]:
test[i][j] = 0
else:
pass

当我打印结果时,会给我一个全零数组,结果应该是这样的:

[[1 1 0 0 2]
[1 1 0 2 2]
[0 0 0 2 2]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]

有人能告诉我哪种方法最有效吗?谢谢

代码中的问题是:

for k in lst:

您在[1,2]中要求k=1和k=2,以检查它们是否都匹配数组arr中的当前值,并且在任何情况下都发现它不是1或不是2,因此它们总是赋值0。

看,当数组中的值(即test[i][j](等于1(或任何数字(时,它将首先与数字CCD_ 3进行比较(这发生在循环CCD_。它将看到1==1,因此它将通过。然后它将在另一次迭代(k=2(中与数字2进行比较。它会看到1!=2,所以它将运行行test[i][j] = 0并将数组中的值变为零。所以,问题是在任何情况下,无论数组中的哪个值,它都会分配给0。(从逻辑上讲,这总是正确的:如果不是number != 1,则比number != 2。(

最新更新