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

Numpy查找数组匹配值索引输出不符合预期的原因排查

问题原因
  • 核心问题出在np.where()的返回值格式上:该函数返回的是与输入数组维度一致的元组,对于一维数组匹配场景,返回格式为(匹配位置索引数组,),你直接将整个元组追加到列表a中,自然无法得到纯索引组成的结果。
  • 其次,就算提取了元组中的索引数组,直接追加的话列表中会存储numpy数组对象,而非你需要的数值元素,最终输出格式也会不符合预期。
  • 额外注意:原代码缺少import numpy as np导入语句,运行前需要先补充。
修复方案

方案1:修改现有循环逻辑

仅需调整追加元素的逻辑,提取np.where返回结果中的索引值即可:

import numpy as np
a = []

data = ['2007-01-03', '2007-01-04', '2007-01-05', '2007-01-08', '2007-01-09'
        , '2007-01-10', '2007-01-11', '2007-01-12', '2007-01-16']
data1 = ['2007-01-04', '2007-01-11']

data = np.array(data)
data1 = np.array(data1)

for day in data1:
    # 取返回元组的第一个元素(索引数组)的第一个值(单匹配场景下唯一值)
    a.append(np.where(day == data)[0][0])

print(a)
# 输出:[1, 6]

方案2:使用向量化操作替代循环(更高效)

数据量较大时推荐用numpy内置函数避免循环,代码更简洁:

import numpy as np

data = ['2007-01-03', '2007-01-04', '2007-01-05', '2007-01-08', '2007-01-09'
        , '2007-01-10', '2007-01-11', '2007-01-12', '2007-01-16']
data1 = ['2007-01-04', '2007-01-11']

data = np.array(data)
data1 = np.array(data1)

# np.in1d返回data中元素是否存在于data1的布尔数组,np.where取对应索引
a = np.where(np.in1d(data, data1))[0]
print(a)
# 输出:[1 6],如需转Python列表可调用.tolist()方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:54:01