如果此问题重复了可用问题,则表示歉意。还没有找到一个正是我要找的。
我感兴趣的是检测字符串/数组中的模式,例如abcabc
,在这些字符串/数组中,这些模式同样可以用整数编码。我的应用程序是这样的,我正在使用流式传感器,其中上述序列中的每个字母都是一个传感器(例如,A
是一个传感器)。由于传感器故障等原因,我的序列并不总是非常定期/重复。由于各种故障,它们可能会像这样出现,例如bcabcabca
或abcbca
。
我的应用程序变得更加困难,因为我事先不知道我的数据集中有多少个传感器,所以我需要一个算法来从序列中推断出那个数字(就像上面给出的那样)。唉,对于所有给定的示例,算法应该产生ABC
,因为这是最长和最常见的模式。
我的一个想法是简单地说:
import numpy as np
from collections import Counter
# ABCABCABCABC encoded with integers
A = np.array(
[[ 1 ,2, 3],
[ 1 ,2, 3],
[ 1 ,2, 3],
[ 1 ,2, 3]])
c = Counter(map(tuple, A)).most_common()[0]
# ((1,2,3), 4)
但这似乎效率很低,因为我必须多次(而且可能多次,因为我的序列很长,回想起来,我事先不知道重复序列的长度是3),然后每次运行计数器
,以评估出现(或不出现)模式的规律性。
其他想法包括使用Knuth–Morris–Pratt算法以及n-grams或其组合。或者计算后缀树。
有更好的办法吗?
编辑
更多详情:
好的,所以我想出了这个,请尝试打破它。
from nltk import ngrams
from iteration_utilities import all_monotone
def find_longest_monotonic_increasing_ngram(seq):
# Store stats
gram_stats = {}
# Find longest common subsequence / n-gram
M = []
for m in range(1,int(0.2*len(seq))):
gram = Counter(ngrams(seq, m)).most_common()[0]
# Check if gram is monotonically increasing (i.e. is it sorted)
if all_monotone(gram[0],strict=True,decreasing=False):
gram_stats[m] = gram
M.append(m)
return max([gram_stats[m][0] for m in M], key=len)
MWE:
A = np.tile([1,2,3], 30)
# Mess up
A = np.insert(A,0,[1,2]) # One missing sensor at t = start
A = np.append(A,1) # two missing sensors at t = final
A[50] = 2 # Missed sensor reading at t=50
# Run
find_longest_monotonic_increasing_ngram(A)
>>> (1, 2, 3)
我正在寻找一种算法(可能是用Python实现的),能够找到字符串中最重复的序列。其中,对于重复,我指的是不间断地反复重复的任何字符组合(串联重复)。 我正在寻找的算法与“查找最常见的单词”的算法不同。事实上,重复块不需要是字符串中最常见的字(子字符串)。 例如: 不幸的是,我不知道如何解决这个问题。任何帮助都非常欢迎。 更新 有一个额外的例子来说明我希望返回重复次数最多的序列,不管它的基本构造块是
好的,所以我查询DB并从IP地址列表生成一个数组: 返回的数组看起来像这样: 但是如果我想找到上面列表中的第一个或任何IP,出于某种原因,它什么也找不到: 我到底做错了什么?
问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?
问题内容: 有没有找到最常见的方法? 应该从该列表中找到单词“ test” 问题答案: 不要重新发明轮子,而要使用此类的方法: 返回指定集合中等于指定对象的元素数。更正式地,返回集合中元素e的数量,使得(o == null?e == null:o.equals(e))。 如果您需要 计算 所有元素的出现次数,请巧妙地使用Map并循环:)或将您的列表放在Set中,然后使用上述方法在set的每个元素上
问题内容: 我需要找到表中的所有行,其中特定字段的字符串在两个或多个位置重复。 可以在MySQL语句中完成吗? 编辑 我需要获取每一行,而不仅仅是计数有多少重复项。我希望能够编辑这些字段。 问题答案: 是的,尝试这样的事情:
请帮忙!!