python - 使用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
据我了解,这是一个大小差异。有没有办法解决我的不同大小数组的问题?
解决方案
其他人指出,真正的问题是您无法通过同时遍历两个数组来检查成员资格。使用 Python 的in
运算符是一个不错的选择。
但是,如果我们在 Numpy 中,我们可以使用 Numpy element-wise 版本的同一件事:
a[np.isin(a, b)] = -3
np.isin(a,b)
返回一个布尔型 ndarray,指示 a 的每个元素是否在 b 中,我们可以使用它来索引 a,并且只将 b 中的值设置为 -3。
推荐阅读
- laravel - $model->get() 上 Eloquent 模型时间戳的时区错误,但 print_r() 正确
- paypal - 交易因违规而被拒绝
- android - 如何在不收到任何通知的情况下从 Firebase Cloud Messaging 仪表板发送数据?
- python - 使用另一个列表的元素创建空列表
- reactjs - 为什么 textAlign 或 align 在 reactjs 中不起作用?
- c++ - 在 C++ 复制省略期间如何管理内存?
- authentication - Asp.net 核心 API 使用 AzureAD 令牌进行身份验证
- javascript - 无法在浏览器中获取 angularJS 的输出
- css - 将段落宽度限制为标题宽度
- javascript - 我可以将我的 jQuery 代码拆分为 2 个 .js 文件吗?