Python中如何检查数组是否包含某值_利用NumPy的in1d函数匹配元素

应优先用 x in arr 检查单值存在性;np.in1d 适用于批量判断,需注意 assume_unique 参数、类型一致性和浮点精度问题;新代码推荐 np.isin 替代。

np.in1d 判断数组是否含某值,但别直接用它做“存在性检查”

np.in1d 的设计目标是批量判断多个元素是否在另一个数组中出现,返回布尔数组,不是 True/False。想查“某个值 x 是否在 arr 里”,直接写 np.in1d([x], arr) 会返回 [True][False],还得额外取索引或调 any() —— 多此一举。

  • 真正轻量的写法是:x in arr(对一维 ndarray 有效,底层走 C 级成员检查)
  • 如果 arr 是高维,先用 arr.flatten()arr.ravel() 拉平再查
  • np.in1d 合适的场景是:你有一组待查值 test_vals,想一次性知道它们各自是否在 ref_arr 中出现

np.in1dassume_unique 参数影响性能,不设对默认值可能拖慢 3 倍以上

ref_arr(第二个参数)本身不含重复值时,显式传 assume_unique=Truenp.in1d 会跳过去重步骤,改用哈希查找;否则默认会先调 np.unique 去重,尤其对大数组代价明显。

  • 确认 ref_arr 无重复?直接加 assume_unique=True
  • 不确定?别硬设 True,否则结果可能错(比如 ref_arr = [1, 1, 2],设 Truein1d([1], ref_arr) 可能返回 [False]
  • 实测:100 万元素数组,设 False(默认)比 True 慢 2.7×,且内存多占约 40%

注意 np.in1d 对数据类型敏感,浮点比较容易误判

如果 test_valsref_arr 类型不一致(比如一个是 float32,一个是 float64),或含浮点数,np.in1d 用的是严格相等(==),不是近似相等。小误差会导致本该匹配的值被漏掉。

FILM

利用两张现有的图像,创建一个动画。

下载

  • 避免混用精度:统一转成 ref_arr.astype(test_vals.dtype) 再传入
  • 真要处理浮点容差?别用 np.in1d,改用 np.isclose 配合广播,例如:np.any(np.isclose(ref_arr, x, atol=1e-8))
  • 整数、字符串、bool 安全;datetime64object 类型也能用,但速度慢,且 object 数组中若含 NaN 会引发 TypeError

替代方案:什么时候该换 np.isin

np.isinnp.in1d 的现代替代,语义更清晰、行为更直观(比如保持输入维度、支持 invert 参数),且从 NumPy 1.13 起就推荐使用。老代码里看到 in1d,基本都可以无缝换成 isin

  • 函数签名几乎一样:np.isin(test_vals, ref_arr, assume_unique=...)
  • 返回形状和 test_vals 一致,不用再 reshape;而 in1d 总是返回一维
  • 如果你用的是 NumPy ≥ 1.13,新代码直接写 np.isin,别纠结兼容旧版本
  • 唯一要注意:np.isin 不支持 kind 参数(in1d 有但极少用),一般不影响

实际用的时候,最常被忽略的是类型对齐和浮点精度——不是函数不会用,而是没意识到输入数据本身就在悄悄破坏匹配逻辑。

相关推荐:

动视确认《使命召唤:黑色行动 1/2》支持 PS4、PS5 跨平台联机匹配

感谢网友 不一样的体验 的线索投递! 7 月 12 日消息,动视旗下游戏《使命召唤:黑色行动 1/2》现已登陆索尼 PS4、PS5 平台,但许多玩家一度认为,这两款游戏无法支持跨世代联机匹配。如今动视官方确认,PS4、PS5 版玩家之间可以互相匹配,但游戏不支持与 PS3 或其他平台进行联机。同时在两款游戏中,季票玩家可以与非季票玩家匹配。作为参考,《使命召唤:黑色行动 1》最初发售于 2010 ...

《我玩梗贼牛》同桌的你正确匹配所有情侣通关攻略

《我玩梗贼牛》同桌的你怎么过?这一关需要正确匹配所有情侣,下面给大家带来了《我玩梗贼牛》同桌的你正确匹配所有情侣通关攻略图文一览,大家需要的可来查看! 《我玩梗贼牛》同桌的你正确匹配所有情侣通关攻略 同桌的你 目标:正确匹配所有情侣 1、从他们的穿着打扮去匹配 2、下图所示情侣移动后,需要把地上的口红给女生 3、中间的情侣移动后,需要把后面地上的情书拖动给男生 4、答案如下图所示: 以上就是《我玩...

内存暴降50倍且精度无损,MIT提出注意力匹配,能终结大模型显存危机吗?

想象这样一个场景:你正盯着屏幕,看着你的自主 ai 智能体(比如 openclaw)疯狂地运作。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 它正在自主审查一个包含数十万行代码的史诗级开源项目,穿梭于无数的文件、API 文档和调试日志之间。它表现得像一个不知疲倦的超级程序员,但在这「无所不能」的表象之下,潜伏着一个随时可能引爆的硬件梦魇 ...

百度搜索怎么把结果限制在标题里_百度搜索标题匹配指令【详解】

intitle:指令可精准筛选标题含关键词的网页,仅匹配标签内容;语法为intitle:关键词(无空格),多词用空格分隔,整体匹配加英文双引号;可搭配site:、filetype:等进一步限定。 想让百度搜索结果只显示标题里含关键词的网页,用 intitle: 指令就能做到。它不看正文、不看URL、也不看图片文字,只盯住网页的 标签内容,精准度高,特别适合找官方通知、招生简章、白皮书这类标题规范的...

Cursor重构函数提示词怎么写才能保持输入输出不变

必须锁定接口契约、禁止修改调用侧可见行为、提供与原逻辑一致的测试用例:明确写出函数签名与docstring,禁止更改函数名、参数顺序、默认值、返回类型及边界响应,附准确断言示例。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 要让Cursor在重构函数时严格保持原有输入输出行为不变,关键在于提示词必须锁定接口契约、禁止修改调用侧可见部分,并...
· AI · 274373

中国裁判文书网网页查询导航:精准匹配各类司法案例

中国裁判文书网新版支持案号直查、高级检索(分段/组合/法律依据)、地图导航及结果页深度筛选,精准定位相似判决书。 想快速定位与自己案件高度相似的判决书,避免在成千上万篇文书中盲目翻找?中国裁判文书网新版界面已支持按段落、法院层级、审判人员等多维度锁定目标文书,关键在于用对查询路径而非堆砌关键词。 直击案号精准定位 如果已知案件完整案号(如“(2023)京0101民初1234号”),这是最快最准的入...

VLOOKUP函数怎么用 Excel跨表查询数据详细教程

必须用VLOOKUP跨表匹配,因它要求查找值位于目标区域首列,否则返回#N/A;需确认数据表命名且编号在A列、名称在B列;源表中输入=VLOOKUP(A2,产品信息!$A$2:$B$5000,2,FALSE),加绝对引用防偏移;查不到时用IFERROR包裹并自定义提示;跨工作簿需用带路径的引用格式,含空格或中文时路径须用单引号包裹。 要在Excel中把Sheet1里的一列编号自动替换成Sheet2...

Excel怎么计算两个日期之间的月数 DATEDIF函数用法教程

推荐用DATEDIF函数计算完整月数,公式为=DATEDIF(开始日期,结束日期,"m"),结果严格按自然月计数;若不可用,可用YEAR与MONTH组合并校正日偏差。 要准确算出两个日期之间相差多少个完整月份,比如员工入职到当前日期的工龄月数、项目周期跨度、合同剩余月数,必须用能自动忽略日部分偏差的函数,不能简单用年份差乘12加月份差。 用DATEDIF函数直接计算整月数 这是最推荐的方法,函数专...