栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在2D和1D数组之间逐元素使用numpy isin

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在2D和1D数组之间逐元素使用numpy isin

广播基础一

一个简单的方法是

broadcasting
在扩展其中一个数组然后沿各自的轴进行任意缩减之后-

In [140]: (full_array==sub_arrays[...,None]).any(axis=1)Out[140]: array([[ True, False,  True, False, False,  True],       [False,  True,  True, False,  True, False]])

searchsorted

特定情况#1

通过

full_array
排序以及所有元素
sub_arrays
至少存在于中
full_array
,我们还可以使用
np.searchsorted
-

idx = np.searchsorted(full_array, sub_arrays)out = np.zeros((sub_arrays.shape[0],len(full_array)),dtype=bool)np.put_along_axis(out, idx, 1, axis=1)

具体案例#2

经过

full_array
排序后,如果不是所有元素
sub_arrays
都保证至少存在于中
full_array
,我们需要采取额外的步骤-

idx = np.searchsorted(full_array, sub_arrays)idx[idx==len(full_array)] = 0out = np.zeros((sub_arrays.shape[0],len(full_array)),dtype=bool)np.put_along_axis(out, idx, full_array[idx] == sub_arrays, axis=1)

一般情况

对于

full_array
不一定要排序的真正通用情况,我们需要将
sorter
arg与
searchsorted
-

def isin2D(full_array, sub_arrays):    out = np.zeros((sub_arrays.shape[0],len(full_array)),dtype=bool)    sidx = full_array.argsort()    idx = np.searchsorted(full_array, sub_arrays, sorter=sidx)    idx[idx==len(full_array)] = 0    idx0 = sidx[idx]    np.put_along_axis(out, idx0, full_array[idx0] == sub_arrays, axis=1)    return out

样品运行-

In [214]: full_arrayOut[214]: array(['E', 'F', 'A', 'B', 'D', 'C'], dtype='|S1')In [215]: sub_arraysOut[215]: array([['Z', 'C', 'F'],       ['B', 'C', 'E']], dtype='|S1')In [216]: isin2D(full_array, sub_arrays)Out[216]: array([[False,  True, False, False, False,  True],       [ True, False, False,  True, False,  True]])


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号