如何实现multiarray.correlate2(a,v,mode)?

时间:2014-12-13 19:14:20

标签: python numpy scipy

在我理解Numpy.correlate()函数如何实际工作的路上,我在纯Python中实现它,但我看到的是非常令人失望的:

def correlate(a, v, mode='valid', old_behavior=False):
    mode = _mode_from_name(mode)
    if old_behavior:
        warnings.warn("""Warning.""", DeprecationWarning)
        return multiarray.correlate(a, v, mode)
    else:
        return multiarray.correlate2(a, v, mode)

所以我开始寻找multiarray.correlate2(a, v, mode)函数的实现,但不幸的是我找不到它。我只想说,我正在寻找它,因为我试图自己实现自相关函数,而且我错过了与mode='full'Numpy.correlate()参数类似的功能将结果作为1D数组返回。提前谢谢你的帮助。

2 个答案:

答案 0 :(得分:7)

与其他语言(如c)相比,python代码的速度可能非常低。 numpy旨在为数组提供高性能的操作,因此开发人员决定在c中实现一些操作。

不幸的是,在correlate的代码库中找不到numpy的python实现,但如果您熟悉Cpython的扩展模块,您可以找到相关代码here

不同的模式只指定输出数组的长度。 您可以通过转换输入来模拟它们:

import numpy as np
a = [1, 2, 3]
v = [0, 1, 0.5]
np.correlate(a, v, mode="full")

返回:

array([ 0.5,  2. ,  3.5,  3. ,  0. ])

使用零填充v可以获得相同的结果:

np.correlate(a, [0, 0] + v + [0, 0])

返回相同的结果:

array([ 0.5,  2. ,  3.5,  3. ,  0. ])

答案 1 :(得分:0)

else if (args [0] === 'time') { //Edits time at which embed is posted
        eventschedule.reschedule(message.content.slice(16))
        console.log(eventschedule)
        return message.channel.send(`Embed post time changed successfully to ${message.content.slice(16)}`);

找到了!它可能是私有API,在使用numpy.multiarray或新发现的“正确”名称进行首次搜索后找不到文档。 最佳搜索查询是“ np.core.multiarray.correlate2 github”

np.core.multiarray.correlate2
dir(np.core.multiarray.correlate2) # to inspect
print (numpy.__version__) 
print numpy.__version__ # python 2

如果您打算根据自己的目的自定义代码,请当心。

return multiarray.correlate2(a, v, mode) # mode is int data type

如果这是您在代码库中的第一个漏洞,并且您正在最后期限,请不要与内部API混淆。对我来说太迟了。