You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy中np.where匹配多值返回结果长度为1的问题求解

解决numpy中np.where返回元组的问题

你猜的完全正确!np.where() 返回的结果是一个元组,这是它的设计特性——为了兼容多维数组的索引返回需求。比如处理二维数组时,它会返回包含行索引数组和列索引数组的元组,格式像(row_indices, col_indices)。而你这里是一维数组,所以元组里只有一个元素,就是你要的索引数组。

两种快速提取目标数组的方法:

方法1:直接提取元组的第一个元素

只需要在np.where()的结果后面加上[0],就能拿到里面的索引数组:

import numpy as np
a = [1,3,5,7,9,11,13,15]
b = [1,7,13]
x = np.where(np.isin(a,b))[0]
print(x)       # 输出:[0 3 6]
print(len(x))  # 输出:3

方法2:使用np.flatnonzero()简化代码

如果你只需要一维数组的非零元素索引(这里np.isin(a,b)返回的布尔数组里,匹配的位置是True,等价于1),可以直接用np.flatnonzero(),它会直接返回一维的索引数组,省去拆元组的步骤:

x = np.flatnonzero(np.isin(a,b))
print(x)       # 输出:[0 3 6]

额外说明

如果以后处理多维数组,比如二维数组:

a_2d = np.array([[1,2],[3,4],[5,6]])
b = [2,5]
x = np.where(np.isin(a_2d,b))
print(x)  # 输出:(array([0, 2]), array([1, 0]))

这时候元组里的两个数组分别对应匹配元素的行索引和列索引,你可以根据需求单独提取其中一个,比如x[0]拿行索引,x[1]拿列索引。

内容的提问来源于stack exchange,提问作者its_broke_again

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:04:49