鱼C论坛

 找回密码
 立即注册
查看: 4055|回复: 2

numpy的searchsorted( )用于在两个数组中查找相同元素

[复制链接]
发表于 2017-3-7 23:09:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import numpy as np
def get_index_searchsorted(x,y):
    index=np.argsort(x)
    sorted_x=x[index]
    sorted_index=np.searchsorted(sorted_x,y)
    yindex=np.take(index,sorted_index,mode='clip')
    mask= x[yindex]!=y
    yindex[mask]=-1
    return yindex
x=np.array([ 3,  5,  7,  1,  9,  8,  6, 10])
y=np.array([  2,   1,   5,  10, 100,   6])
get_index_searchsorted(x,y)

有x,y两个数组,找到y中每个元素在x中的下标,若不存在则下标设置为-1。
算法有点复杂,没太看懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-8 00:23:26 | 显示全部楼层
np.argsort(x)是将x从小到大排序的索引值组合新的列表返回
sorted_x=x[index]就是将x从小到大排序的列表赋值给sorted_x
np.searchsorted(sorted_x,y)搜索y中每个元素在sorted_x的索引值组合成新的列表赋值给sorted_index
np.take(index,sorted_index,mode='clip')取出index中索引值位sorted_index的值赋值给yindex
mask= x[yindex]!=y 拿y与x中索引出的值进行比较形成布尔类型列表赋值给mask
yindex[mask]=-1将mask中值为false的赋值为-1

其实你每一句都将结果打印出来 你就可以理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 11:54:06 | 显示全部楼层
在两个数组中查找相同元素
直接这样不是更简单?
>>> set(x)&set(y)
{1, 10, 5, 6}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表