簡體   English   中英

python在numpy字符串數組中查找字符串模式

[英]python find string pattern in numpy array of strings

我有一個長度為100的字符串'A'的numpy數組,它們是不同大小的句子。 它是字符串非numpy字符串

>>> type(A[0])
<type 'str'>

我想在A中找到字符串的位置,其中包含某些類似'zzz'的模式。

我試過了

np.core.defchararray.find(A, 'zzz')

給出錯誤:

TypeError: string operation on non-string array

我假設我需要將A中的每個'str'更改為numpy字符串?

編輯:

我想在A中找到'zzz'外觀的索引

不需要對此有所了解,您可以通過列表理解和in運算符獲取標記列表:

>>> import numpy as np
>>> lst = ["aaa","aazzz","zzz"]
>>> n = np.array(lst)
>>> [i for i,item in enumerate(n) if "zzz" in item]
[1, 2]

請注意,這里的數組元素實際上是numpy字符串,但in運算符也適用於常規字符串,所以它沒有實際意義。

這里的問題是你的字符串數組的性質。

如果我使數組像:

In [362]: x=np.array(['one','two','three'])

In [363]: x
Out[363]: 
array(['one', 'two', 'three'], 
      dtype='<U5')

In [364]: type(x[0])
Out[364]: numpy.str_

元素是特殊的字符串,隱式填充為5個字符(最長的'np.char方法適用於這種數組

In [365]: np.char.find(x,'one')
Out[365]: array([ 0, -1, -1])

但是如果我創建一個包含字符串的對象數組,它會產生錯誤

In [366]: y=np.array(['one','two','three'],dtype=object)

In [367]: y
Out[367]: array(['one', 'two', 'three'], dtype=object)

In [368]: type(y[0])
Out[368]: str

In [369]: np.char.find(y,'one')
...
/usr/lib/python3/dist-packages/numpy/core/defchararray.py in find(a, sub, start, end)
...
TypeError: string operation on non-string array

通常,必須將對象數組視為列表。

In [370]: y
Out[370]: array(['one', 'two', 'three'], dtype=object)

In [371]: [i.find('one') for i in y]
Out[371]: [0, -1, -1]

In [372]: np.array([i.find('one') for i in y])
Out[372]: array([ 0, -1, -1])

np.char方法很方便,但它們並不快。 他們仍然必須遍歷數組,對每個元素應用常規字符串操作。

你可以嘗試這個:

np.core.defchararray.find(A.astype(str), 'zzz')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM