我有一个双打数组,大约200,000行乘100列,我正在寻找一种快速算法来查找包含与给定模式最相似的序列的行(模式可以是10到100个元素的任何位置).我正在使用python,所以蛮力方法(下面的代码:遍历每一行和开始列索引,并计算每个点的欧几里德距离)大约需要三分钟.
numpy.correlate函数有望更快地解决这个问题(在不到20秒的时间内在同一个数据集上运行).然而,它只是计算整个行上的模式的滑点产品,这意味着为了比较相似性,我必须首先将结果标准化.规范化互相关需要计算每个数据切片的标准偏差,这立即抵消了首先使用numpy.correlate的速度提升.
是否可以在python中快速计算规范化的互相关?或者我是否必须采用C语言编写蛮力方法?
def norm_corr(x,y,mode='valid'):
ya=np.array(y)
slices=[x[pos:pos+len(y)] for pos in range(len(x)-len(y)+1)]
return [np.linalg.norm(np.array(z)-ya) for z in slices]
similarities=[norm_corr(arr,pointarray) for arr in arraytable]
Run Code Online (Sandbox Code Playgroud) 我正在构建一个python模块,以从大量文本集中提取标签,尽管其结果是高质量的,但执行速度非常慢。我正在尝试通过使用多处理来加快进程,并且也一直有效,直到尝试引入锁,以便一次只有一个进程连接到我们的数据库。我一生都不知道如何进行这项工作-尽管进行了大量的搜索和调整,但我仍然得到了帮助PicklingError: Can't pickle <type 'thread.lock'>: attribute lookup thread.lock failed。这是令人讨厌的代码-在我尝试传递锁对象作为的参数之前,它工作得很好f。
def make_network(initial_tag, max_tags = 2, max_iter = 3):
manager = Manager()
lock = manager.Lock()
pool = manager.Pool(8)
# this is a very expensive function that I would like to parallelize
# over a list of tags. It involves a (relatively cheap) call to an external
# database, which needs a lock to avoid simultaneous queries. It takes a list
# of strings (tags) as its sole argument, …Run Code Online (Sandbox Code Playgroud) 我主要是一名Python开发人员,但遗憾的是我不得不为客户端在VB .NET中编写基于GUI的程序.我自己已经能够弄清楚VB的大多数特性,但我没有找到将这个简单的习语翻译成VB的方法:
def my_function(arg1, arg2, arg3):
# do stuff with args
pass
args = [1,2,3]
my_function(*args)
Run Code Online (Sandbox Code Playgroud)
我正在处理一些带有大量变量的讨厌函数,如果我可以做类似的事情,那么代码会更好更易读,所以我不会被困在
MyFunction(reader(0), reader(1), reader(2), reader(3)) 'ad infinum
Run Code Online (Sandbox Code Playgroud)