gpt4 book ai didi

python - numpy.isin 字符串元素的错误结果

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:44 26 4
gpt4 key购买 nike

假设我想检查字符串 x 是否是字符串 y 的子字符串,我可以使用成员运算符,例如

x = 'a'
y = 'abc'
x in y
>> True

但是现在,xy 都是 numpy 字符串数组,我想按元素执行上述操作。根据文档,

numpy.isin is an element-wise function version of the python keyword in

所以我想

x = np.array(['a','b','c'])
y = np.array(['ab','fgd','cdfsgfsdh'])
np.isin(x,y)

会给出 array([True, False, True]),但它实际上给出了 array([False, False, False])

是我误解了文档还是错误?
执行这样的逐元素操作的正确方法是什么?

最佳答案

np.char 有一些将字符串方法应用于数组元素的函数。例如可以使用字符串find:

In [25]: x = np.array(['a','b','c']) 
...: y = np.array(['ab','fgd','cdfsgfsdh'])
In [27]: np.char.find(y,x)
Out[27]: array([ 0, -1, 0])

在其他情况下的测试表明,这与列表理解的速度大致相同。 numpy 没有自己的快速编译字符串操作,所以它仍然依赖字符串方法,一个一个地应用。

如果您只查看 y 字符串的第一个字符,您可以这样做:

In [28]: y.astype('U1')                                                         
Out[28]: array(['a', 'f', 'c'], dtype='<U1')
In [29]: y.astype('U1')==x
Out[29]: array([ True, False, True])

换句话说,截断 y 字符串并进行快速元素比较。

frompyfunc 相对于列表理解通常有 2 倍的速度增益:

In [30]: np.frompyfunc(lambda a,b: a in b,2,1)(x,y)                             
Out[30]: array([True, False, True], dtype=object)

关于python - numpy.isin 字符串元素的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com