首页 > 解决方案 > 使用for循环和python 3中的if条件将两个数组中的匹配元素替换为不同的值

问题描述

我有两个数组:

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([8,2,5,0])

如果 b 中出现相同的元素,我想用 -3 替换 a 的元素。我想用带/不带 if 条件的 for 循环来做到这一点。这是我所拥有的:

for i in range(len(a)):
    if a[i] == b[i]:
       a[i] == -3

        
              
print(a) 

我得到这个错误:

IndexError                                Traceback (most recent call last)
<ipython-input-19-5f8874f38b74> in <module>()
      7 
      8 for i in range(len(a)):
----> 9     if a[i] == b[i]:
     10        a[i] == -3
     11 

IndexError: index 4 is out of bounds for axis 0 with size 4

据我了解,这是一个大小差异。有没有办法解决我的不同大小数组的问题?

标签: pythonarrayspython-3.xloops

解决方案


其他人指出,真正的问题是您无法通过同时遍历两个数组来检查成员资格。使用 Python 的in运算符是一个不错的选择。

但是,如果我们在 Numpy 中,我们可以使用 Numpy element-wise 版本的同一件事:

a[np.isin(a, b)] = -3

np.isin(a,b)返回一个布尔型 ndarray,指示 a 的每个元素是否在 b 中,我们可以使用它来索引 a,并且只将 b 中的值设置为 -3。


推荐阅读