Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在另一个numpy数组中查找数组字符串序列_Python_Arrays_Numpy_Sequence - Fatal编程技术网

Python 在另一个numpy数组中查找数组字符串序列

Python 在另一个numpy数组中查找数组字符串序列,python,arrays,numpy,sequence,Python,Arrays,Numpy,Sequence,我有一个关于搜索数组的问题。我需要找到一些我存储在数组中的字符串序列,例如,它可能是这样的 阵列1: ['818181''747473''747474''636363''767676''737373''727373''373838' '697070' '686869' '115115115' '737474' '757575' '777777' '818181' '747473' “747474”“636363”“767676”“737373”“727373”“757575”“696969”]

我有一个关于搜索数组的问题。我需要找到一些我存储在数组中的字符串序列,例如,它可能是这样的 阵列1:

['818181''747473''747474''636363''767676''737373''727373''373838'
'697070' '686869' '115115115' '737474' '757575' '777777' '818181' '747473'

“747474”“636363”“767676”“737373”“727373”“757575”“696969”]
一点也不;再看看。当您到达第5个元素时,您已经知道元素2、3、4不是第一个元素,因此您只需切换到非匹配元素重新开始

这是语法中一个众所周知的问题,可以用有限状态机来处理

首先,不要担心字符串的内容;重要的是你要找到一系列的符号。每个“数字”字符串都是不同的符号。为了方便起见,让我们按如下方式映射:

'818181' => a
'747473' => b
'747474' => c
etc.
因此,可以将阵列简化为如下所示:

 '818181' '747473' '747474' '636363' '767676' '737373' '727373' '373838'
  a        b        c        d        e        f        g        h
 '697070' '686869' '115115115' '737474' '757575' '777777' '818181' '747473'
  i        j        k           l        m        n        a        b
 '747474' '636363' '767676' '737373' '727373' '757575' '696969']
  c        d        e        f        g        m        o
或者,作为一行序列:

  abcdefghijklmnabcdefgmo
在您注意到的情况下,
b
不匹配,我们不必备份到输入的
b
位置并重新开始;我们已经确定
bcd
匹配,但它们不是
a
,因此我们不备份:我们只需重新开始,将
a
与不匹配的项进行比较

碰巧的是,我们从来都不需要支持。在最坏的情况下,我们将继续检查匹配失败的位置,但不会检查目标字符串的开头。有一个棘手的情况,我们必须处理:中字符串匹配

考虑当目标序列末尾附近的第二个
m
处出现不匹配时会发生什么。在本例中,我们知道我们刚刚匹配了
abcdefg
,但当前符号不是
m
。。。但是如果可能是
h
。为了避免备份,我们利用部分匹配,并使用
h
重新开始检查

要处理此算法,需要对目标字符串进行一些预处理。创建第二个数组,保存目标字符串中每个位置的重新启动索引。你只需简单地检查它偏离自身前端的位置就可以做到这一点。对于您的示例,很简单:
o
是主字符串和移位字符串匹配多个字符的唯一位置,但在此位置不同

  abcdefghijklmnabcdefgmo
  11111111111111111111181

这会让您移动吗?

您可以循环遍历数组1中的每个值,并使用
np.where()
获取主数组中值的索引。将索引添加到列表中,然后对列表进行排序。然后找到与数组1的长度匹配的索引的连续长度

例如:

def连续(数据,步长=1):
返回np.split(数据,np.where(np.diff(数据)!=步长)[0]+1)
索引列表=[]
对于阵列1中的val:
index_list.extend(list(np.where(main_数组==val)))
索引\u list.sort()
对于连续序列(索引列表):
如果len(序列)=len(阵列1):
打印(顺序)
连续函数的@unutbu from积分